Results Study 2: Personality Change Through Self-Improvement or Self-Acceptance

Author

[blinded]

1 Load packages

Show the code
library(renv)
library(tidyverse)
library(broom)
library(labelled)
library(psych)
library(GPArotation)
#library(devtools)
#install_github("cran/multicon") # not on CRAN atm
library(multicon)
library(correlation)
library(careless)
library(corrplot)
library(lavaan)
library(semTools)
library(semPlot)
library(knitr)
library(ggdist)
library(ggforce)
library(cowplot)
library(nortest)
library(lmerTest)
library(effectsize)
library(wordcloud) # these 3 for the word clouds
library(RColorBrewer)
library(tm)

2 Data cleaning

Show the code
# source("clean_data_st2.R") 
# for data protection reasons, we provide the cleaned data sets here where potentially sensitive variables were dropped (see "clean_data_st2.R" for details)
base::load("data/df_sbsa2.rda")

Also need this list of the Big Five traits:

Show the code
### BFI-2 - Traits
b5t_extraversion = c("_01", "_06", "_11", "_16", "_21", "_26", 
                     "_31", "_36", "_41", "_46", "_51", "_56")
b5t_agreeableness = c("_02", "_07", "_12", "_17", "_22", "_27", 
                      "_32", "_37", "_42", "_47", "_52", "_57")
b5t_conscientiousness = c("_03", "_08", "_13", "_18", "_23", "_28", 
                          "_33", "_38", "_43", "_48", "_53", "_58")
b5t_neuroticism = c("_04", "_09", "_14", "_19", "_24", "_29", 
                    "_34", "_39", "_44", "_49", "_54", "_59")
b5t_openness = c("_05", "_10", "_15", "_20", "_25", "_30", 
                 "_35", "_40", "_45", "_50", "_55", "_60")
### BFI-2 - Facets
# facets of extraversion
b5f_sociability = c("_01", "_16", "_31", "_46") 
b5f_assertiveness = c("_06", "_21", "_36", "_51")
b5f_energy = c("_11", "_26", "_41", "_56")
# facets of agreeableness
b5f_compassion = c("_02", "_17", "_32", "_47")
b5f_respectfulness = c("_07", "_22", "_37", "_52")
b5f_trust = c("_12", "_27", "_42", "_57")
# facets of conscientiousness
b5f_organization = c("_03", "_18", "_33", "_48")
b5f_productiveness = c("_08", "_23", "_38", "_53")
b5f_responsibility = c("_13", "_28", "_43", "_58")
# facets of neuroticism
b5f_anxiety = c("_04", "_19", "_34", "_49")
b5f_depression = c("_09", "_24", "_39", "_54")
b5f_volatility = c("_14", "_29", "_44", "_59")
# facets of openness
b5f_curiosity = c("_10", "_25", "_40", "_55")
b5f_aesthetic = c("_05", "_20", "_35", "_50")
b5f_imagination = c("_15", "_30", "_45", "_60")

# add keys list (to indicate reverse scoring) - unfortunately this does not work (for the facets) automatically with psych function
keys_extraversion = c("+", "+", "-", "-", "+", "-", "-", "-", "+", "+", "-", "+")
keys_agreeableness = c("+", "+", "-", "-", "-", "+", "+", "-", "-", "-", "+", "+")
keys_conscientiousness = c("-", "-", "+", "+", "-", "-", "+", "+", "+", "-", "+", "-")
keys_neuroticism = c("-", "-", "+", "+", "-", "-", "+", "+", "-", "-", "+", "+")
keys_openness = c("-", "+", "+", "+", "-", "-", "+", "+", "-", "-", "-", "+")
# facets of extraversion
keys_sociability = c("+", "-", "-", "+") 
keys_assertiveness = c("+", "+", "-", "-")
keys_energy = c("-", "-", "+", "+")
# facets of agreeableness
keys_compassion = c("+", "-", "+", "-")
keys_respectfulness = c("+", "-", "-", "+")
keys_trust = c("-", "+", "-", "+")
# facets of conscientiousness
keys_organization = c("-", "+", "+", "-")
keys_productiveness = c("-", "-", "+", "+")
keys_responsibility = c("+", "-", "+", "-")
# facets of neuroticism
keys_anxiety = c("-", "+", "+", "-")
keys_depression = c("-", "-", "+", "+")
keys_volatility = c("+", "-", "-", "+")
# facets of openness
keys_curiosity = c("+", "-", "+", "-")
keys_aesthetic = c("-", "+", "+", "-")
keys_imagination = c("+", "-", "-", "+")

b5_vars <- list(list(b5t_extraversion, keys_extraversion), 
                list(b5t_agreeableness, keys_agreeableness), 
                list(b5t_conscientiousness, keys_conscientiousness), 
                list(b5t_neuroticism, keys_neuroticism), 
                list(b5t_openness, keys_openness),
                list(b5f_sociability, keys_sociability), 
                list(b5f_assertiveness, keys_assertiveness), 
                list(b5f_energy, keys_energy), 
                list(b5f_compassion, keys_compassion), 
                list(b5f_respectfulness, keys_respectfulness), 
                list(b5f_trust, keys_trust),
                list(b5f_organization, keys_organization), 
                list(b5f_productiveness, keys_productiveness), 
                list(b5f_responsibility, keys_responsibility),
                list(b5f_anxiety, keys_anxiety), 
                list(b5f_depression, keys_depression), 
                list(b5f_volatility, keys_volatility),
                list(b5f_curiosity, keys_curiosity), 
                list(b5f_aesthetic, keys_aesthetic), 
                list(b5f_imagination, keys_imagination))
names(b5_vars) = c("extraversion", "agreeableness", "conscientiousness", "neuroticism", "openness",
                   "sociability", "assertiveness", "energy", 
                   "compassion", "respectfulness", "trust",
                   "organization", "productiveness", "responsibility",
                   "anxiety", "depression", "volatility",
                   "curiosity", "aesthetic", "imagination")

bfi_versions <- list("bf01", "bf02", "bf03", "bf04",
                     "bf05", "bf06")
names(bfi_versions) <- c("pre_curr", "pre_ideal", "post_curr", "post_ideal",
                         "comb_curr", "comb_ideal")

3 Create item parcels

3.1 Well-being measures

Reshape data

Show the code
df_sbsa2_wide_wb <- df_sbsa2 %>% 
  arrange(pid, time) %>% 
  select(pid, time, rando, starts_with(c("sw06", "ml01", "rs01", "sc01"))) %>% 
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = starts_with(c("sw06", "ml01", "rs01", "sc01")))
# colnames(df_sbsa2_wide_wb)

3.1.1 Meaning in life

Check CFA item loadings at T1

cfa_meaning <- '
# Define the latent factors
meaning1 =~ NA*ml01_01_t1 + lambda1*ml01_01_t1 + lambda2*ml01_02_t1 + lambda3*ml01_03_t1 + lambda4*ml01_04_t1 + lambda5*ml01_05_t1 + lambda6*ml01_06_t1 + lambda7*ml01_07_t1 + lambda8*ml01_08_t1 + lambda9*ml01_09_t1 + lambda10*ml01_10_t1

# Intercepts
ml01_01_t1 ~ i1*1
ml01_02_t1 ~ 1
ml01_03_t1 ~ 1
ml01_04_t1 ~ 1
ml01_05_t1 ~ 1
ml01_06_t1 ~ 1
ml01_07_t1 ~ 1
ml01_08_t1 ~ 1
ml01_09_t1 ~ 1
ml01_10_t1 ~ 1

# Unique Variances
ml01_01_t1 ~~ ml01_01_t1
ml01_02_t1 ~~ ml01_02_t1
ml01_03_t1 ~~ ml01_03_t1
ml01_04_t1 ~~ ml01_04_t1
ml01_05_t1 ~~ ml01_05_t1
ml01_06_t1 ~~ ml01_06_t1
ml01_07_t1 ~~ ml01_07_t1
ml01_08_t1 ~~ ml01_08_t1
ml01_09_t1 ~~ ml01_09_t1
ml01_10_t1 ~~ ml01_10_t1

# Latent Variable Means
meaning1 ~ 0*1

# Latent Variable Variances and Covariance
meaning1 ~~ 1*meaning1
'
fit_cfa_meaning <- cfa(cfa_meaning, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_cfa_meaning, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 23 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        30

                                                  Used       Total
  Number of observations                           847         849
  Number of missing patterns                         1            

Model Test User Model:
                                                      
  Test statistic                              2451.486
  Degrees of freedom                                35
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              5903.003
  Degrees of freedom                                45
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.587
  Tucker-Lewis Index (TLI)                       0.470
                                                      
  Robust Comparative Fit Index (CFI)             0.587
  Robust Tucker-Lewis Index (TLI)                0.470

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -14719.920
  Loglikelihood unrestricted model (H1)     -13494.177
                                                      
  Akaike (AIC)                               29499.840
  Bayesian (BIC)                             29642.091
  Sample-size adjusted Bayesian (SABIC)      29546.820

Root Mean Square Error of Approximation:

  RMSEA                                          0.286
  90 Percent confidence interval - lower         0.276
  90 Percent confidence interval - upper         0.295
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.286
  90 Percent confidence interval - lower         0.276
  90 Percent confidence interval - upper         0.295
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.222

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  meaning1 =~                                         
    m01_01_ (lmb1)    1.478    0.050   29.760    0.000
    m01_02_ (lmb2)   -0.453    0.053   -8.581    0.000
    m01_03_ (lmb3)   -0.312    0.055   -5.697    0.000
    m01_04_ (lmb4)    1.586    0.048   33.354    0.000
    m01_05_ (lmb5)    1.442    0.049   29.455    0.000
    m01_06_ (lmb6)    1.527    0.050   30.720    0.000
    m01_07_ (lmb7)   -0.284    0.055   -5.202    0.000
    m01_08_ (lmb8)   -0.444    0.057   -7.749    0.000
    m01_09_ (lmb9)   -1.460    0.059  -24.872    0.000
    m01_10_ (lm10)   -0.835    0.058  -14.334    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .ml01_01_1 (i1)    4.156    0.060   68.803    0.000
   .ml01_02_1         5.347    0.052  103.093    0.000
   .ml01_03_1         5.123    0.053   96.752    0.000
   .ml01_04_1         3.973    0.060   65.761    0.000
   .ml01_05_1         4.483    0.059   75.615    0.000
   .ml01_06_1         3.970    0.061   64.910    0.000
   .ml01_07_1         5.086    0.053   96.700    0.000
   .ml01_08_1         5.026    0.056   90.118    0.000
   .ml01_09_1         3.880    0.067   57.625    0.000
   .ml01_10_1         4.885    0.060   82.075    0.000
    meaning1          0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .ml01_01_t1        0.905    0.054   16.872    0.000
   .ml01_02_t1        2.073    0.102   20.396    0.000
   .ml01_03_t1        2.277    0.111   20.495    0.000
   .ml01_04_t1        0.576    0.042   13.801    0.000
   .ml01_05_t1        0.898    0.053   16.956    0.000
   .ml01_06_t1        0.836    0.052   16.215    0.000
   .ml01_07_t1        2.263    0.110   20.510    0.000
   .ml01_08_t1        2.438    0.119   20.416    0.000
   .ml01_09_t1        1.706    0.091   18.665    0.000
   .ml01_10_t1        2.304    0.115   20.001    0.000
    meaning1          1.000                           
tidy(fit_cfa_meaning) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 10 × 6
   term                   op    label    estimate std.error std.all
   <chr>                  <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 meaning1 =~ ml01_04_t1 =~    lambda4     1.59     0.0475   0.902
 2 meaning1 =~ ml01_06_t1 =~    lambda6     1.53     0.0497   0.858
 3 meaning1 =~ ml01_01_t1 =~    lambda1     1.48     0.0497   0.841
 4 meaning1 =~ ml01_09_t1 =~    lambda9    -1.46     0.0587  -0.745
 5 meaning1 =~ ml01_05_t1 =~    lambda5     1.44     0.0489   0.836
 6 meaning1 =~ ml01_10_t1 =~    lambda10   -0.835    0.0583  -0.482
 7 meaning1 =~ ml01_02_t1 =~    lambda2    -0.453    0.0528  -0.300
 8 meaning1 =~ ml01_08_t1 =~    lambda8    -0.444    0.0573  -0.273
 9 meaning1 =~ ml01_03_t1 =~    lambda3    -0.312    0.0548  -0.203
10 meaning1 =~ ml01_07_t1 =~    lambda7    -0.284    0.0545  -0.185

Reverse-code and form parcels:

df_sbsa2_wide_wb <- df_sbsa2_wide_wb %>% 
  mutate(ml01_09_t1_r = ml01_09_t1,
         ml01_10_t1_r = ml01_10_t1,
         ml01_02_t1_r = ml01_02_t1,
         ml01_08_t1_r = ml01_08_t1,
         ml01_07_t1_r = ml01_07_t1,
         ml01_03_t1_r = ml01_03_t1,
         ml01_09_t2_r = ml01_09_t2,
         ml01_10_t2_r = ml01_10_t2,
         ml01_02_t2_r = ml01_02_t2,
         ml01_08_t2_r = ml01_08_t2,
         ml01_07_t2_r = ml01_07_t2,
         ml01_03_t2_r = ml01_03_t2,
         ml01_09_t3_r = ml01_09_t3,
         ml01_10_t3_r = ml01_10_t3,
         ml01_02_t3_r = ml01_02_t3,
         ml01_08_t3_r = ml01_08_t3,
         ml01_07_t3_r = ml01_07_t3,
         ml01_03_t3_r = ml01_03_t3) %>% 
  mutate(across(intersect(starts_with("ml01"), ends_with("_r")), 
                ~ recode(.x, `1` = 7L, `2` = 6L, `3` = 5L, `4` = 4L, `5` = 3L, `6` = 2L, `7` = 1L, .default = NA_integer_))) %>% 
  mutate(meaning_par1_t1 = rowMeans(across(c(ml01_04_t1, ml01_10_t1_r, ml01_03_t1_r, ml01_07_t1_r)), na.rm=T),
         meaning_par2_t1 = rowMeans(across(c(ml01_06_t1, ml01_05_t1, ml01_08_t1_r)), na.rm=T),
         meaning_par3_t1 = rowMeans(across(c(ml01_01_t1, ml01_09_t1_r, ml01_02_t1_r)), na.rm=T),
         meaning_par1_t2 = rowMeans(across(c(ml01_04_t2, ml01_10_t2_r, ml01_03_t2_r, ml01_07_t2_r)), na.rm=T),
         meaning_par2_t2 = rowMeans(across(c(ml01_06_t2, ml01_05_t2, ml01_08_t2_r)), na.rm=T),
         meaning_par3_t2 = rowMeans(across(c(ml01_01_t2, ml01_09_t2_r, ml01_02_t2_r)), na.rm=T),
         meaning_par1_t3 = rowMeans(across(c(ml01_04_t3, ml01_10_t3_r, ml01_03_t3_r, ml01_07_t3_r)), na.rm=T),
         meaning_par2_t3 = rowMeans(across(c(ml01_06_t3, ml01_05_t3, ml01_08_t3_r)), na.rm=T),
         meaning_par3_t3 = rowMeans(across(c(ml01_01_t3, ml01_09_t3_r, ml01_02_t3_r)), na.rm=T))

3.1.2 Self-esteem

Check CFA item loadings at T1

cfa_selfes <- '
# Define the latent factors
selfes1 =~ NA*rs01_01_t1 + lambda1*rs01_01_t1 + lambda2*rs01_02_t1 + lambda3*rs01_03_t1 + lambda4*rs01_04_t1 + lambda5*rs01_05_t1 + lambda6*rs01_06_t1 + lambda7*rs01_07_t1 + lambda8*rs01_08_t1 + lambda9*rs01_09_t1 + lambda10*rs01_10_t1

# Intercepts
rs01_01_t1 ~ i1*1
rs01_02_t1 ~ 1
rs01_03_t1 ~ 1
rs01_04_t1 ~ 1
rs01_05_t1 ~ 1
rs01_06_t1 ~ 1
rs01_07_t1 ~ 1
rs01_08_t1 ~ 1
rs01_09_t1 ~ 1
rs01_10_t1 ~ 1

# Unique Variances
rs01_01_t1 ~~ rs01_01_t1
rs01_02_t1 ~~ rs01_02_t1
rs01_03_t1 ~~ rs01_03_t1
rs01_04_t1 ~~ rs01_04_t1
rs01_05_t1 ~~ rs01_05_t1
rs01_06_t1 ~~ rs01_06_t1
rs01_07_t1 ~~ rs01_07_t1
rs01_08_t1 ~~ rs01_08_t1
rs01_09_t1 ~~ rs01_09_t1
rs01_10_t1 ~~ rs01_10_t1

# Latent Variable Means
selfes1 ~ 0*1

# Latent Variable Variances and Covariance
selfes1 ~~ 1*selfes1
'
fit_cfa_selfes <- cfa(cfa_selfes, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_cfa_selfes, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 15 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        30

                                                  Used       Total
  Number of observations                           847         849
  Number of missing patterns                         1            

Model Test User Model:
                                                      
  Test statistic                               493.618
  Degrees of freedom                                35
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              4386.991
  Degrees of freedom                                45
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.894
  Tucker-Lewis Index (TLI)                       0.864
                                                      
  Robust Comparative Fit Index (CFI)             0.894
  Robust Tucker-Lewis Index (TLI)                0.864

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -11502.923
  Loglikelihood unrestricted model (H1)     -11256.114
                                                      
  Akaike (AIC)                               23065.846
  Bayesian (BIC)                             23208.097
  Sample-size adjusted Bayesian (SABIC)      23112.827

Root Mean Square Error of Approximation:

  RMSEA                                          0.124
  90 Percent confidence interval - lower         0.115
  90 Percent confidence interval - upper         0.134
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.124
  90 Percent confidence interval - lower         0.115
  90 Percent confidence interval - upper         0.134
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.062

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  selfes1 =~                                          
    r01_01_ (lmb1)    0.867    0.036   23.906    0.000
    r01_02_ (lmb2)   -0.997    0.042  -23.899    0.000
    r01_03_ (lmb3)    0.501    0.028   17.737    0.000
    r01_04_ (lmb4)    0.571    0.033   17.507    0.000
    r01_05_ (lmb5)   -0.932    0.039  -23.875    0.000
    r01_06_ (lmb6)   -1.063    0.041  -26.027    0.000
    r01_07_ (lmb7)    0.702    0.033   20.966    0.000
    r01_08_ (lmb8)   -0.619    0.041  -14.943    0.000
    r01_09_ (lmb9)   -1.150    0.039  -29.187    0.000
    r01_10_ (lm10)    0.979    0.035   27.592    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .rs01_01_1 (i1)    3.034    0.041   74.189    0.000
   .rs01_02_1         3.174    0.047   67.592    0.000
   .rs01_03_1         3.947    0.030  132.913    0.000
   .rs01_04_1         3.824    0.034  111.837    0.000
   .rs01_05_1         2.789    0.044   63.327    0.000
   .rs01_06_1         3.223    0.047   68.318    0.000
   .rs01_07_1         3.648    0.036  100.087    0.000
   .rs01_08_1         3.816    0.042   89.803    0.000
   .rs01_09_1         2.653    0.047   56.001    0.000
   .rs01_10_1         3.218    0.042   76.962    0.000
    selfes1           0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .rs01_01_t1        0.665    0.036   18.392    0.000
   .rs01_02_t1        0.873    0.048   18.258    0.000
   .rs01_03_t1        0.496    0.025   19.518    0.000
   .rs01_04_t1        0.665    0.034   19.560    0.000
   .rs01_05_t1        0.774    0.042   18.468    0.000
   .rs01_06_t1        0.755    0.043   17.571    0.000
   .rs01_07_t1        0.632    0.033   18.965    0.000
   .rs01_08_t1        1.146    0.058   19.925    0.000
   .rs01_09_t1        0.577    0.036   16.228    0.000
   .rs01_10_t1        0.523    0.031   17.066    0.000
    selfes1           1.000                           
tidy(fit_cfa_selfes) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 10 × 6
   term                  op    label    estimate std.error std.all
   <chr>                 <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 selfes1 =~ rs01_09_t1 =~    lambda9    -1.15     0.0394  -0.834
 2 selfes1 =~ rs01_06_t1 =~    lambda6    -1.06     0.0409  -0.774
 3 selfes1 =~ rs01_02_t1 =~    lambda2    -0.997    0.0417  -0.730
 4 selfes1 =~ rs01_10_t1 =~    lambda10    0.979    0.0355   0.804
 5 selfes1 =~ rs01_05_t1 =~    lambda5    -0.932    0.0390  -0.727
 6 selfes1 =~ rs01_01_t1 =~    lambda1     0.867    0.0363   0.729
 7 selfes1 =~ rs01_07_t1 =~    lambda7     0.702    0.0335   0.662
 8 selfes1 =~ rs01_08_t1 =~    lambda8    -0.619    0.0414  -0.500
 9 selfes1 =~ rs01_04_t1 =~    lambda4     0.571    0.0326   0.573
10 selfes1 =~ rs01_03_t1 =~    lambda3     0.501    0.0283   0.580

Reverse-code and form parcels:

df_sbsa2_wide_wb <- df_sbsa2_wide_wb %>% 
  mutate(rs01_09_t1_r = rs01_09_t1,
         rs01_06_t1_r = rs01_06_t1,
         rs01_02_t1_r = rs01_02_t1,
         rs01_05_t1_r = rs01_05_t1,
         rs01_08_t1_r = rs01_08_t1,
         rs01_09_t2_r = rs01_09_t2,
         rs01_06_t2_r = rs01_06_t2,
         rs01_02_t2_r = rs01_02_t2,
         rs01_05_t2_r = rs01_05_t2,
         rs01_08_t2_r = rs01_08_t2,
         rs01_09_t3_r = rs01_09_t3,
         rs01_06_t3_r = rs01_06_t3,
         rs01_02_t3_r = rs01_02_t3,
         rs01_05_t3_r = rs01_05_t3,
         rs01_08_t3_r = rs01_08_t3) %>% 
  mutate(across(intersect(starts_with("rs01"), ends_with("_r")), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(selfes_par1_t1 = rowMeans(across(c(rs01_09_t1_r, rs01_01_t1, rs01_04_t1, rs01_03_t1)), na.rm=T),
         selfes_par2_t1 = rowMeans(across(c(rs01_06_t1_r, rs01_05_t1_r, rs01_08_t1_r)), na.rm=T),
         selfes_par3_t1 = rowMeans(across(c(rs01_02_t1_r, rs01_10_t1, rs01_07_t1)), na.rm=T),
         selfes_par1_t2 = rowMeans(across(c(rs01_09_t2_r, rs01_01_t2, rs01_04_t2, rs01_03_t2)), na.rm=T),
         selfes_par2_t2 = rowMeans(across(c(rs01_06_t2_r, rs01_05_t2_r, rs01_08_t2_r)), na.rm=T),
         selfes_par3_t2 = rowMeans(across(c(rs01_02_t2_r, rs01_10_t2, rs01_07_t2)), na.rm=T),
         selfes_par1_t3 = rowMeans(across(c(rs01_09_t3_r, rs01_01_t3, rs01_04_t3, rs01_03_t3)), na.rm=T),
         selfes_par2_t3 = rowMeans(across(c(rs01_06_t3_r, rs01_05_t3_r, rs01_08_t3_r)), na.rm=T),
         selfes_par3_t3 = rowMeans(across(c(rs01_02_t3_r, rs01_10_t3, rs01_07_t3)), na.rm=T))

3.1.3 Self-concept clarity

Check CFA item loadings at T1

cfa_concept <- '
# Define the latent factors
concept1 =~ NA*sc01_01_t1 + lambda1*sc01_01_t1 + lambda2*sc01_02_t1 + lambda3*sc01_03_t1 + lambda4*sc01_04_t1 + lambda5*sc01_05_t1 + lambda6*sc01_06_t1 + lambda7*sc01_07_t1 + lambda8*sc01_08_t1 + lambda9*sc01_09_t1 + lambda10*sc01_10_t1 + lambda11*sc01_11_t1 + lambda12*sc01_12_t1

# Intercepts
sc01_01_t1 ~ i1*1
sc01_02_t1 ~ 1
sc01_03_t1 ~ 1
sc01_04_t1 ~ 1
sc01_05_t1 ~ 1
sc01_06_t1 ~ 1
sc01_07_t1 ~ 1
sc01_08_t1 ~ 1
sc01_09_t1 ~ 1
sc01_10_t1 ~ 1
sc01_11_t1 ~ 1
sc01_12_t1 ~ 1

# Unique Variances
sc01_01_t1 ~~ sc01_01_t1
sc01_02_t1 ~~ sc01_02_t1
sc01_03_t1 ~~ sc01_03_t1
sc01_04_t1 ~~ sc01_04_t1
sc01_05_t1 ~~ sc01_05_t1
sc01_06_t1 ~~ sc01_06_t1
sc01_07_t1 ~~ sc01_07_t1
sc01_08_t1 ~~ sc01_08_t1
sc01_09_t1 ~~ sc01_09_t1
sc01_10_t1 ~~ sc01_10_t1
sc01_11_t1 ~~ sc01_11_t1
sc01_12_t1 ~~ sc01_12_t1

# Latent Variable Means
concept1 ~ 0*1

# Latent Variable Variances and Covariance
concept1 ~~ 1*concept1
'
fit_cfa_concept <- cfa(cfa_concept, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_cfa_concept, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 32 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           847         849
  Number of missing patterns                         2            

Model Test User Model:
                                                      
  Test statistic                               430.284
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              4809.241
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.921
  Tucker-Lewis Index (TLI)                       0.903
                                                      
  Robust Comparative Fit Index (CFI)             0.921
  Robust Tucker-Lewis Index (TLI)                0.903

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -15026.110
  Loglikelihood unrestricted model (H1)     -14810.968
                                                      
  Akaike (AIC)                               30124.220
  Bayesian (BIC)                             30294.921
  Sample-size adjusted Bayesian (SABIC)      30180.596

Root Mean Square Error of Approximation:

  RMSEA                                          0.091
  90 Percent confidence interval - lower         0.083
  90 Percent confidence interval - upper         0.099
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    0.987
                                                      
  Robust RMSEA                                   0.091
  90 Percent confidence interval - lower         0.083
  90 Percent confidence interval - upper         0.099
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             0.987

Standardized Root Mean Square Residual:

  SRMR                                           0.040

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  concept1 =~                                         
    s01_01_ (lmb1)    0.939    0.040   23.441    0.000
    s01_02_ (lmb2)    1.028    0.042   24.709    0.000
    s01_03_ (lmb3)    0.965    0.041   23.263    0.000
    s01_04_ (lmb4)    1.030    0.041   25.217    0.000
    s01_05_ (lmb5)    0.820    0.043   18.976    0.000
    s01_06_ (lmb6)    0.038    0.044    0.874    0.382
    s01_07_ (lmb7)    0.801    0.044   18.176    0.000
    s01_08_ (lmb8)    1.053    0.038   28.033    0.000
    s01_09_ (lmb9)    1.034    0.039   26.382    0.000
    s01_10_ (lm10)    0.934    0.040   23.116    0.000
    s01_11_ (lm11)   -0.760    0.039  -19.544    0.000
    s01_12_ (lm12)    0.841    0.043   19.695    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .sc01_01_1 (i1)    3.157    0.045   70.268    0.000
   .sc01_02_1         3.378    0.047   71.322    0.000
   .sc01_03_1         3.232    0.046   69.556    0.000
   .sc01_04_1         3.139    0.047   67.116    0.000
   .sc01_05_1         2.974    0.046   64.411    0.000
   .sc01_06_1         2.889    0.042   69.113    0.000
   .sc01_07_1         2.700    0.047   57.795    0.000
   .sc01_08_1         2.753    0.045   61.854    0.000
   .sc01_09_1         2.856    0.046   62.701    0.000
   .sc01_10_1         2.926    0.045   64.757    0.000
   .sc01_11_1         3.243    0.042   77.576    0.000
   .sc01_12_1         3.115    0.046   67.710    0.000
    concept1          0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .sc01_01_t1        0.829    0.045   18.572    0.000
   .sc01_02_t1        0.843    0.046   18.184    0.000
   .sc01_03_t1        0.896    0.048   18.622    0.000
   .sc01_04_t1        0.793    0.044   18.037    0.000
   .sc01_05_t1        1.134    0.058   19.475    0.000
   .sc01_06_t1        1.479    0.072   20.577    0.000
   .sc01_07_t1        1.208    0.062   19.612    0.000
   .sc01_08_t1        0.570    0.034   16.947    0.000
   .sc01_09_t1        0.688    0.039   17.655    0.000
   .sc01_10_t1        0.856    0.046   18.662    0.000
   .sc01_11_t1        0.903    0.047   19.403    0.000
   .sc01_12_t1        1.085    0.056   19.402    0.000
    concept1          1.000                           
tidy(fit_cfa_concept) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                   op    label    estimate std.error std.all
   <chr>                  <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 concept1 =~ sc01_08_t1 =~    lambda8    1.05      0.0375  0.812 
 2 concept1 =~ sc01_09_t1 =~    lambda9    1.03      0.0392  0.780 
 3 concept1 =~ sc01_04_t1 =~    lambda4    1.03      0.0408  0.756 
 4 concept1 =~ sc01_02_t1 =~    lambda2    1.03      0.0416  0.746 
 5 concept1 =~ sc01_03_t1 =~    lambda3    0.965     0.0415  0.714 
 6 concept1 =~ sc01_01_t1 =~    lambda1    0.939     0.0400  0.718 
 7 concept1 =~ sc01_10_t1 =~    lambda10   0.934     0.0404  0.710 
 8 concept1 =~ sc01_12_t1 =~    lambda12   0.841     0.0427  0.628 
 9 concept1 =~ sc01_05_t1 =~    lambda5    0.820     0.0432  0.610 
10 concept1 =~ sc01_07_t1 =~    lambda7    0.801     0.0440  0.589 
11 concept1 =~ sc01_11_t1 =~    lambda11  -0.760     0.0389 -0.624 
12 concept1 =~ sc01_06_t1 =~    lambda6    0.0381    0.0436  0.0313

Reverse-code and form parcels:

df_sbsa2_wide_wb <- df_sbsa2_wide_wb %>% # based on the item content, it makes more sense here to recode all except sc01_11
  mutate(sc01_01_t1_r = sc01_01_t1,
         sc01_02_t1_r = sc01_02_t1,
         sc01_03_t1_r = sc01_03_t1,
         sc01_04_t1_r = sc01_04_t1,
         sc01_05_t1_r = sc01_05_t1,
         sc01_06_t1_r = sc01_06_t1,
         sc01_07_t1_r = sc01_07_t1,
         sc01_08_t1_r = sc01_08_t1,
         sc01_09_t1_r = sc01_09_t1,
         sc01_10_t1_r = sc01_10_t1,
         sc01_12_t1_r = sc01_12_t1,
         sc01_01_t2_r = sc01_01_t2,
         sc01_02_t2_r = sc01_02_t2,
         sc01_03_t2_r = sc01_03_t2,
         sc01_04_t2_r = sc01_04_t2,
         sc01_05_t2_r = sc01_05_t2,
         sc01_06_t2_r = sc01_06_t2,
         sc01_07_t2_r = sc01_07_t2,
         sc01_08_t2_r = sc01_08_t2,
         sc01_09_t2_r = sc01_09_t2,
         sc01_10_t2_r = sc01_10_t2,
         sc01_12_t2_r = sc01_12_t2,
         sc01_01_t3_r = sc01_01_t3,
         sc01_02_t3_r = sc01_02_t3,
         sc01_03_t3_r = sc01_03_t3,
         sc01_04_t3_r = sc01_04_t3,
         sc01_05_t3_r = sc01_05_t3,
         sc01_06_t3_r = sc01_06_t3,
         sc01_07_t3_r = sc01_07_t3,
         sc01_08_t3_r = sc01_08_t3,
         sc01_09_t3_r = sc01_09_t3,
         sc01_10_t3_r = sc01_10_t3,
         sc01_12_t3_r = sc01_12_t3) %>% 
  mutate(across(intersect(starts_with("sc01"), ends_with("_r")), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(concept_par1_t1 = rowMeans(across(c(sc01_08_t1_r, sc01_01_t1_r, sc01_05_t1_r, sc01_06_t1_r)), na.rm=T),
         concept_par2_t1 = rowMeans(across(c(sc01_09_t1_r, sc01_03_t1_r, sc01_12_t1_r, sc01_11_t1)), na.rm=T),
         concept_par3_t1 = rowMeans(across(c(sc01_04_t1_r, sc01_02_t1_r, sc01_10_t1_r, sc01_07_t1_r)), na.rm=T),
         concept_par1_t2 = rowMeans(across(c(sc01_08_t2_r, sc01_01_t2_r, sc01_05_t2_r, sc01_06_t2_r)), na.rm=T),
         concept_par2_t2 = rowMeans(across(c(sc01_09_t2_r, sc01_03_t2_r, sc01_12_t2_r, sc01_11_t2)), na.rm=T),
         concept_par3_t2 = rowMeans(across(c(sc01_04_t2_r, sc01_02_t2_r, sc01_10_t2_r, sc01_07_t2_r)), na.rm=T),
         concept_par1_t3 = rowMeans(across(c(sc01_08_t3_r, sc01_01_t3_r, sc01_05_t3_r, sc01_06_t3_r)), na.rm=T),
         concept_par2_t3 = rowMeans(across(c(sc01_09_t3_r, sc01_03_t3_r, sc01_12_t3_r, sc01_11_t3)), na.rm=T),
         concept_par3_t3 = rowMeans(across(c(sc01_04_t3_r, sc01_02_t3_r, sc01_10_t3_r, sc01_07_t3_r)), na.rm=T))

# replace NaN with regular NA
df_sbsa2_wide_wb <- df_sbsa2_wide_wb %>% 
  mutate_all(~ifelse(is.nan(.), NA, .))

3.2 Big Five

Show the code
# all time points
df_sbsa2_wide_pers <- df_sbsa2 %>% 
  arrange(pid, time) %>% 
  select(pid, rando, time, starts_with(c("bf05", "bf06"))) %>% 
  mutate(valid=1) %>% 
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(valid, starts_with(c("bf05", "bf06"))))
# colnames(df_sbsa2_wide_pers)

3.2.1 Extraversion - current personality

Check CFA item loadings at T1

cfa_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*bf05_01_t1 + lambda1*bf05_01_t1 + lambda2*bf05_06_t1 + lambda3*bf05_11_t1 + lambda4*bf05_16_t1 + lambda5*bf05_21_t1 + lambda6*bf05_26_t1 + lambda7*bf05_31_t1 + lambda8*bf05_36_t1 + lambda9*bf05_41_t1 + lambda10*bf05_46_t1 + lambda11*bf05_51_t1 + lambda12*bf05_56_t1

# Intercepts
bf05_01_t1 ~ i1*1
bf05_06_t1 ~ 1
bf05_11_t1 ~ 1
bf05_16_t1 ~ 1
bf05_21_t1 ~ 1
bf05_26_t1 ~ 1
bf05_31_t1 ~ 1
bf05_36_t1 ~ 1
bf05_41_t1 ~ 1
bf05_46_t1 ~ 1
bf05_51_t1 ~ 1
bf05_56_t1 ~ 1

# Unique Variances
bf05_01_t1 ~~ bf05_01_t1
bf05_06_t1 ~~ bf05_06_t1
bf05_11_t1 ~~ bf05_11_t1
bf05_16_t1 ~~ bf05_16_t1
bf05_21_t1 ~~ bf05_21_t1
bf05_26_t1 ~~ bf05_26_t1
bf05_31_t1 ~~ bf05_31_t1
bf05_36_t1 ~~ bf05_36_t1
bf05_41_t1 ~~ bf05_41_t1
bf05_46_t1 ~~ bf05_46_t1
bf05_51_t1 ~~ bf05_51_t1
bf05_56_t1 ~~ bf05_56_t1

# Latent Variable Means
extra_curr1 ~ 0*1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
'
fit_cfa_extra_curr <- cfa(cfa_extra_curr, data = df_sbsa2_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_extra_curr, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 34 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           848         849
  Number of missing patterns                         5            

Model Test User Model:
                                                      
  Test statistic                               847.969
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              3167.484
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.744
  Tucker-Lewis Index (TLI)                       0.687
                                                      
  Robust Comparative Fit Index (CFI)             0.744
  Robust Tucker-Lewis Index (TLI)                0.687

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -15300.920
  Loglikelihood unrestricted model (H1)     -14876.935
                                                      
  Akaike (AIC)                               30673.840
  Bayesian (BIC)                             30844.584
  Sample-size adjusted Bayesian (SABIC)      30730.259

Root Mean Square Error of Approximation:

  RMSEA                                          0.132
  90 Percent confidence interval - lower         0.124
  90 Percent confidence interval - upper         0.140
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.132
  90 Percent confidence interval - lower         0.124
  90 Percent confidence interval - upper         0.140
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.079

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  extra_curr1 =~                                      
    b05_01_ (lmb1)    0.945    0.042   22.295    0.000
    b05_06_ (lmb2)    0.540    0.042   12.805    0.000
    b05_11_ (lmb3)   -0.322    0.044   -7.334    0.000
    b05_16_ (lmb4)   -0.822    0.041  -19.905    0.000
    b05_21_ (lmb5)    0.770    0.043   18.089    0.000
    b05_26_ (lmb6)   -0.542    0.047  -11.619    0.000
    b05_31_ (lmb7)   -0.776    0.036  -21.343    0.000
    b05_36_ (lmb8)   -0.468    0.041  -11.547    0.000
    b05_41_ (lmb9)    0.676    0.041   16.507    0.000
    b05_46_ (lm10)    0.925    0.043   21.606    0.000
    b05_51_ (lm11)   -0.586    0.043  -13.508    0.000
    b05_56_ (lm12)    0.600    0.039   15.397    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_01_1 (i1)    2.759    0.046   60.440    0.000
   .bf05_06_1         3.073    0.041   75.058    0.000
   .bf05_11_1         2.769    0.041   66.976    0.000
   .bf05_16_1         3.755    0.043   87.599    0.000
   .bf05_21_1         2.721    0.043   62.705    0.000
   .bf05_26_1         3.057    0.045   68.086    0.000
   .bf05_31_1         4.001    0.039  103.823    0.000
   .bf05_36_1         3.158    0.039   80.714    0.000
   .bf05_41_1         2.862    0.041   69.918    0.000
   .bf05_46_1         2.919    0.046   63.955    0.000
   .bf05_51_1         3.188    0.042   75.107    0.000
   .bf05_56_1         3.279    0.039   84.689    0.000
    extr_crr1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_01_t1        0.874    0.052   16.939    0.000
   .bf05_06_t1        1.130    0.058   19.592    0.000
   .bf05_11_t1        1.343    0.066   20.296    0.000
   .bf05_16_t1        0.881    0.050   17.454    0.000
   .bf05_21_t1        1.003    0.055   18.195    0.000
   .bf05_26_t1        1.415    0.072   19.774    0.000
   .bf05_31_t1        0.656    0.038   17.105    0.000
   .bf05_36_t1        1.079    0.054   19.840    0.000
   .bf05_41_t1        0.961    0.052   18.580    0.000
   .bf05_46_t1        0.909    0.053   17.105    0.000
   .bf05_51_t1        1.184    0.061   19.467    0.000
   .bf05_56_t1        0.910    0.048   19.012    0.000
    extra_curr1       1.000                           
tidy(fit_cfa_extra_curr) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                      op    label    estimate std.error std.all
   <chr>                     <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 extra_curr1 =~ bf05_01_t1 =~    lambda1     0.945    0.0424   0.711
 2 extra_curr1 =~ bf05_46_t1 =~    lambda10    0.925    0.0428   0.696
 3 extra_curr1 =~ bf05_16_t1 =~    lambda4    -0.822    0.0413  -0.659
 4 extra_curr1 =~ bf05_31_t1 =~    lambda7    -0.776    0.0364  -0.692
 5 extra_curr1 =~ bf05_21_t1 =~    lambda5     0.770    0.0426   0.610
 6 extra_curr1 =~ bf05_41_t1 =~    lambda9     0.676    0.0410   0.568
 7 extra_curr1 =~ bf05_56_t1 =~    lambda12    0.600    0.0389   0.532
 8 extra_curr1 =~ bf05_51_t1 =~    lambda11   -0.586    0.0434  -0.474
 9 extra_curr1 =~ bf05_26_t1 =~    lambda6    -0.542    0.0467  -0.415
10 extra_curr1 =~ bf05_06_t1 =~    lambda2     0.540    0.0421   0.453
11 extra_curr1 =~ bf05_36_t1 =~    lambda8    -0.468    0.0405  -0.411
12 extra_curr1 =~ bf05_11_t1 =~    lambda3    -0.322    0.0438  -0.267

Reverse-code and form parcels:

df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% 
  mutate(bf05_31_t1_r = bf05_31_t1,
         bf05_16_t1_r = bf05_16_t1,
         bf05_26_t1_r = bf05_26_t1,
         bf05_51_t1_r = bf05_51_t1,
         bf05_36_t1_r = bf05_36_t1,
         bf05_11_t1_r = bf05_11_t1,
         bf05_31_t2_r = bf05_31_t2,
         bf05_16_t2_r = bf05_16_t2,
         bf05_26_t2_r = bf05_26_t2,
         bf05_51_t2_r = bf05_51_t2,
         bf05_36_t2_r = bf05_36_t2,
         bf05_11_t2_r = bf05_11_t2,
         bf05_31_t3_r = bf05_31_t3,
         bf05_16_t3_r = bf05_16_t3,
         bf05_26_t3_r = bf05_26_t3,
         bf05_51_t3_r = bf05_51_t3,
         bf05_36_t3_r = bf05_36_t3,
         bf05_11_t3_r = bf05_11_t3) %>% 
  mutate(across(c(bf05_31_t1_r, bf05_16_t1_r, bf05_26_t1_r, bf05_51_t1_r, bf05_36_t1_r, bf05_11_t1_r, 
                  bf05_31_t2_r, bf05_16_t2_r, bf05_26_t2_r, bf05_51_t2_r, bf05_36_t2_r, bf05_11_t2_r, 
                  bf05_31_t3_r, bf05_16_t3_r, bf05_26_t3_r, bf05_51_t3_r, bf05_36_t3_r, bf05_11_t3_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(extra_curr_par1_t1 = rowMeans(across(c(bf05_01_t1, bf05_41_t1, bf05_26_t1_r, bf05_11_t1_r)), na.rm=T),
         extra_curr_par2_t1 = rowMeans(across(c(bf05_46_t1, bf05_21_t1, bf05_51_t1_r, bf05_36_t1_r)), na.rm=T),
         extra_curr_par3_t1 = rowMeans(across(c(bf05_16_t1_r, bf05_31_t1_r, bf05_56_t1, bf05_06_t1)), na.rm=T),
         extra_curr_par1_t2 = rowMeans(across(c(bf05_01_t2, bf05_41_t2, bf05_26_t2_r, bf05_11_t2_r)), na.rm=T),
         extra_curr_par2_t2 = rowMeans(across(c(bf05_46_t2, bf05_21_t2, bf05_51_t2_r, bf05_36_t2_r)), na.rm=T),
         extra_curr_par3_t2 = rowMeans(across(c(bf05_16_t2_r, bf05_31_t2_r, bf05_56_t2, bf05_06_t2)), na.rm=T),
         extra_curr_par1_t3 = rowMeans(across(c(bf05_01_t3, bf05_41_t3, bf05_26_t3_r, bf05_11_t3_r)), na.rm=T),
         extra_curr_par2_t3 = rowMeans(across(c(bf05_46_t3, bf05_21_t3, bf05_51_t3_r, bf05_36_t3_r)), na.rm=T),
         extra_curr_par3_t3 = rowMeans(across(c(bf05_16_t3_r, bf05_31_t3_r, bf05_56_t3, bf05_06_t3)), na.rm=T))

3.2.2 Extraversion - ideal personality

Check CFA item loadings at T1

cfa_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*bf06_01_t1 + lambda1*bf06_01_t1 + lambda2*bf06_06_t1 + lambda3*bf06_11_t1 + lambda4*bf06_16_t1 + lambda5*bf06_21_t1 + lambda6*bf06_26_t1 + lambda7*bf06_31_t1 + lambda8*bf06_36_t1 + lambda9*bf06_41_t1 + lambda10*bf06_46_t1 + lambda11*bf06_51_t1 + lambda12*bf06_56_t1

# Intercepts
bf06_01_t1 ~ i1*1
bf06_06_t1 ~ 1
bf06_11_t1 ~ 1
bf06_16_t1 ~ 1
bf06_21_t1 ~ 1
bf06_26_t1 ~ 1
bf06_31_t1 ~ 1
bf06_36_t1 ~ 1
bf06_41_t1 ~ 1
bf06_46_t1 ~ 1
bf06_51_t1 ~ 1
bf06_56_t1 ~ 1

# Unique Variances
bf06_01_t1 ~~ bf06_01_t1
bf06_06_t1 ~~ bf06_06_t1
bf06_11_t1 ~~ bf06_11_t1
bf06_16_t1 ~~ bf06_16_t1
bf06_21_t1 ~~ bf06_21_t1
bf06_26_t1 ~~ bf06_26_t1
bf06_31_t1 ~~ bf06_31_t1
bf06_36_t1 ~~ bf06_36_t1
bf06_41_t1 ~~ bf06_41_t1
bf06_46_t1 ~~ bf06_46_t1
bf06_51_t1 ~~ bf06_51_t1
bf06_56_t1 ~~ bf06_56_t1

# Latent Variable Means
extra_ideal1 ~ 0*1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
'
fit_cfa_extra_ideal <- cfa(cfa_extra_ideal, data = df_sbsa2_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_extra_ideal, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 40 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           848         849
  Number of missing patterns                         6            

Model Test User Model:
                                                      
  Test statistic                               254.727
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              1146.934
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.814
  Tucker-Lewis Index (TLI)                       0.773
                                                      
  Robust Comparative Fit Index (CFI)             0.816
  Robust Tucker-Lewis Index (TLI)                0.775

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -14072.893
  Loglikelihood unrestricted model (H1)     -13945.529
                                                      
  Akaike (AIC)                               28217.786
  Bayesian (BIC)                             28388.529
  Sample-size adjusted Bayesian (SABIC)      28274.204

Root Mean Square Error of Approximation:

  RMSEA                                          0.066
  90 Percent confidence interval - lower         0.058
  90 Percent confidence interval - upper         0.075
  P-value H_0: RMSEA <= 0.050                    0.001
  P-value H_0: RMSEA >= 0.080                    0.003
                                                      
  Robust RMSEA                                   0.066
  90 Percent confidence interval - lower         0.058
  90 Percent confidence interval - upper         0.075
  P-value H_0: Robust RMSEA <= 0.050             0.001
  P-value H_0: Robust RMSEA >= 0.080             0.003

Standardized Root Mean Square Residual:

  SRMR                                           0.049

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  extra_ideal1 =~                                     
    b06_01_ (lmb1)    0.409    0.034   12.191    0.000
    b06_06_ (lmb2)    0.250    0.036    6.881    0.000
    b06_11_ (lmb3)   -0.307    0.054   -5.691    0.000
    b06_16_ (lmb4)   -0.423    0.049   -8.670    0.000
    b06_21_ (lmb5)    0.478    0.042   11.421    0.000
    b06_26_ (lmb6)   -0.430    0.039  -10.915    0.000
    b06_31_ (lmb7)   -0.491    0.042  -11.702    0.000
    b06_36_ (lmb8)   -0.411    0.044   -9.303    0.000
    b06_41_ (lmb9)    0.383    0.029   13.350    0.000
    b06_46_ (lm10)    0.390    0.040    9.738    0.000
    b06_51_ (lm11)   -0.485    0.042  -11.413    0.000
    b06_56_ (lm12)    0.466    0.033   14.281    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_01_1 (i1)    4.237    0.030  142.383    0.000
   .bf06_06_1         4.128    0.031  132.290    0.000
   .bf06_11_1         2.257    0.046   48.598    0.000
   .bf06_16_1         2.857    0.042   68.327    0.000
   .bf06_21_1         3.803    0.037  102.781    0.000
   .bf06_26_1         1.722    0.035   49.589    0.000
   .bf06_31_1         2.184    0.037   59.386    0.000
   .bf06_36_1         2.201    0.038   57.183    0.000
   .bf06_41_1         4.471    0.025  176.151    0.000
   .bf06_46_1         3.713    0.035  105.946    0.000
   .bf06_51_1         2.392    0.037   64.098    0.000
   .bf06_56_1         4.265    0.029  146.413    0.000
    extra_dl1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_01_t1        0.580    0.032   18.206    0.000
   .bf06_06_t1        0.760    0.038   19.886    0.000
   .bf06_11_t1        1.733    0.086   20.146    0.000
   .bf06_16_t1        1.301    0.067   19.369    0.000
   .bf06_21_t1        0.930    0.050   18.530    0.000
   .bf06_26_t1        0.834    0.044   18.786    0.000
   .bf06_31_t1        0.901    0.049   18.265    0.000
   .bf06_36_t1        1.083    0.056   19.300    0.000
   .bf06_41_t1        0.399    0.023   17.422    0.000
   .bf06_46_t1        0.887    0.046   19.161    0.000
   .bf06_51_t1        0.942    0.051   18.479    0.000
   .bf06_56_t1        0.502    0.030   16.791    0.000
    extra_ideal1      1.000                           
tidy(fit_cfa_extra_ideal) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                       op    label    estimate std.error std.all
   <chr>                      <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 extra_ideal1 =~ bf06_31_t1 =~    lambda7    -0.491    0.0419  -0.459
 2 extra_ideal1 =~ bf06_51_t1 =~    lambda11   -0.485    0.0425  -0.447
 3 extra_ideal1 =~ bf06_21_t1 =~    lambda5     0.478    0.0418   0.444
 4 extra_ideal1 =~ bf06_56_t1 =~    lambda12    0.466    0.0326   0.549
 5 extra_ideal1 =~ bf06_26_t1 =~    lambda6    -0.430    0.0394  -0.426
 6 extra_ideal1 =~ bf06_16_t1 =~    lambda4    -0.423    0.0488  -0.348
 7 extra_ideal1 =~ bf06_36_t1 =~    lambda8    -0.411    0.0442  -0.367
 8 extra_ideal1 =~ bf06_01_t1 =~    lambda1     0.409    0.0336   0.473
 9 extra_ideal1 =~ bf06_46_t1 =~    lambda10    0.390    0.0400   0.382
10 extra_ideal1 =~ bf06_41_t1 =~    lambda9     0.383    0.0287   0.518
11 extra_ideal1 =~ bf06_11_t1 =~    lambda3    -0.307    0.0540  -0.227
12 extra_ideal1 =~ bf06_06_t1 =~    lambda2     0.250    0.0364   0.276

Reverse-code and form parcels:

df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% 
  mutate(bf06_31_t1_r = bf06_31_t1,
         bf06_16_t1_r = bf06_16_t1,
         bf06_26_t1_r = bf06_26_t1,
         bf06_51_t1_r = bf06_51_t1,
         bf06_36_t1_r = bf06_36_t1,
         bf06_11_t1_r = bf06_11_t1,
         bf06_31_t2_r = bf06_31_t2,
         bf06_16_t2_r = bf06_16_t2,
         bf06_26_t2_r = bf06_26_t2,
         bf06_51_t2_r = bf06_51_t2,
         bf06_36_t2_r = bf06_36_t2,
         bf06_11_t2_r = bf06_11_t2,
         bf06_31_t3_r = bf06_31_t3,
         bf06_16_t3_r = bf06_16_t3,
         bf06_26_t3_r = bf06_26_t3,
         bf06_51_t3_r = bf06_51_t3,
         bf06_36_t3_r = bf06_36_t3,
         bf06_11_t3_r = bf06_11_t3) %>% 
  mutate(across(c(bf06_31_t1_r, bf06_16_t1_r, bf06_26_t1_r, bf06_51_t1_r, bf06_36_t1_r, bf06_11_t1_r, 
                  bf06_31_t2_r, bf06_16_t2_r, bf06_26_t2_r, bf06_51_t2_r, bf06_36_t2_r, bf06_11_t2_r, 
                  bf06_31_t3_r, bf06_16_t3_r, bf06_26_t3_r, bf06_51_t3_r, bf06_36_t3_r, bf06_11_t3_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(extra_ideal_par1_t1 = rowMeans(across(c(bf06_31_t1_r, bf06_16_t1_r, bf06_46_t1, bf06_06_t1)), na.rm=T),
         extra_ideal_par2_t1 = rowMeans(across(c(bf06_21_t1, bf06_26_t1_r, bf06_01_t1, bf06_11_t1_r)), na.rm=T),
         extra_ideal_par3_t1 = rowMeans(across(c(bf06_51_t1_r, bf06_56_t1, bf06_36_t1_r, bf06_41_t1)), na.rm=T),
         extra_ideal_par1_t2 = rowMeans(across(c(bf06_31_t2_r, bf06_16_t2_r, bf06_46_t2, bf06_06_t2)), na.rm=T),
         extra_ideal_par2_t2 = rowMeans(across(c(bf06_21_t2, bf06_26_t2_r, bf06_01_t2, bf06_11_t2_r)), na.rm=T),
         extra_ideal_par3_t2 = rowMeans(across(c(bf06_51_t2_r, bf06_56_t2, bf06_36_t2_r, bf06_41_t2)), na.rm=T),
         extra_ideal_par1_t3 = rowMeans(across(c(bf06_31_t3_r, bf06_16_t3_r, bf06_46_t3, bf06_06_t3)), na.rm=T),
         extra_ideal_par2_t3 = rowMeans(across(c(bf06_21_t3, bf06_26_t3_r, bf06_01_t3, bf06_11_t3_r)), na.rm=T),
         extra_ideal_par3_t3 = rowMeans(across(c(bf06_51_t3_r, bf06_56_t3, bf06_36_t3_r, bf06_41_t3)), na.rm=T))

3.2.3 Agreeableness - current personality

Check CFA item loadings at T1

cfa_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*bf05_02_t1 + lambda1*bf05_02_t1 + lambda2*bf05_07_t1 + lambda3*bf05_12_t1 + lambda4*bf05_17_t1 + lambda5*bf05_22_t1 + lambda6*bf05_27_t1 + lambda7*bf05_32_t1 + lambda8*bf05_37_t1 + lambda9*bf05_42_t1 + lambda10*bf05_47_t1 + lambda11*bf05_52_t1 + lambda12*bf05_57_t1

# Intercepts
bf05_02_t1 ~ i1*1
bf05_07_t1 ~ 1
bf05_12_t1 ~ 1
bf05_17_t1 ~ 1
bf05_22_t1 ~ 1
bf05_27_t1 ~ 1
bf05_32_t1 ~ 1
bf05_37_t1 ~ 1
bf05_42_t1 ~ 1
bf05_47_t1 ~ 1
bf05_52_t1 ~ 1
bf05_57_t1 ~ 1

# Unique Variances
bf05_02_t1 ~~ bf05_02_t1
bf05_07_t1 ~~ bf05_07_t1
bf05_12_t1 ~~ bf05_12_t1
bf05_17_t1 ~~ bf05_17_t1
bf05_22_t1 ~~ bf05_22_t1
bf05_27_t1 ~~ bf05_27_t1
bf05_32_t1 ~~ bf05_32_t1
bf05_37_t1 ~~ bf05_37_t1
bf05_42_t1 ~~ bf05_42_t1
bf05_47_t1 ~~ bf05_47_t1
bf05_52_t1 ~~ bf05_52_t1
bf05_57_t1 ~~ bf05_57_t1

# Latent Variable Means
agree_curr1 ~ 0*1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
'
fit_cfa_agree_curr <- cfa(cfa_agree_curr, data = df_sbsa2_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_agree_curr, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 41 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           848         849
  Number of missing patterns                         3            

Model Test User Model:
                                                      
  Test statistic                               532.762
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              2295.706
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.785
  Tucker-Lewis Index (TLI)                       0.738
                                                      
  Robust Comparative Fit Index (CFI)             0.785
  Robust Tucker-Lewis Index (TLI)                0.737

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -14316.892
  Loglikelihood unrestricted model (H1)     -14050.512
                                                      
  Akaike (AIC)                               28705.785
  Bayesian (BIC)                             28876.529
  Sample-size adjusted Bayesian (SABIC)      28762.203

Root Mean Square Error of Approximation:

  RMSEA                                          0.102
  90 Percent confidence interval - lower         0.094
  90 Percent confidence interval - upper         0.110
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.102
  90 Percent confidence interval - lower         0.094
  90 Percent confidence interval - upper         0.110
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.065

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  agree_curr1 =~                                      
    b05_02_ (lmb1)    0.483    0.031   15.345    0.000
    b05_07_ (lmb2)    0.430    0.025   17.189    0.000
    b05_12_ (lmb3)   -0.606    0.044  -13.801    0.000
    b05_17_ (lmb4)   -0.182    0.055   -3.291    0.001
    b05_22_ (lmb5)   -0.643    0.043  -15.116    0.000
    b05_27_ (lmb6)    0.595    0.042   14.270    0.000
    b05_32_ (lmb7)    0.529    0.032   16.781    0.000
    b05_37_ (lmb8)   -0.741    0.044  -17.020    0.000
    b05_42_ (lmb9)   -0.419    0.045   -9.406    0.000
    b05_47_ (lm10)   -0.789    0.044  -17.761    0.000
    b05_52_ (lm11)    0.418    0.025   16.841    0.000
    b05_57_ (lm12)    0.558    0.043   12.968    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_02_1 (i1)    4.188    0.031  136.262    0.000
   .bf05_07_1         4.449    0.025  179.500    0.000
   .bf05_12_1         2.877    0.042   68.327    0.000
   .bf05_17_1         2.667    0.050   52.975    0.000
   .bf05_22_1         2.172    0.041   52.346    0.000
   .bf05_27_1         3.598    0.040   89.031    0.000
   .bf05_32_1         3.963    0.031  126.684    0.000
   .bf05_37_1         2.486    0.043   57.567    0.000
   .bf05_42_1         3.590    0.041   87.538    0.000
   .bf05_47_1         2.526    0.045   56.750    0.000
   .bf05_52_1         4.300    0.025  175.434    0.000
   .bf05_57_1         3.201    0.041   78.189    0.000
    agre_crr1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_02_t1        0.567    0.031   18.581    0.000
   .bf05_07_t1        0.336    0.019   17.849    0.000
   .bf05_12_t1        1.137    0.060   18.981    0.000
   .bf05_17_t1        2.113    0.103   20.507    0.000
   .bf05_22_t1        1.045    0.056   18.699    0.000
   .bf05_27_t1        1.029    0.054   18.970    0.000
   .bf05_32_t1        0.550    0.030   18.167    0.000
   .bf05_37_t1        1.031    0.057   17.986    0.000
   .bf05_42_t1        1.250    0.063   19.829    0.000
   .bf05_47_t1        1.056    0.059   17.798    0.000
   .bf05_52_t1        0.335    0.019   17.988    0.000
   .bf05_57_t1        1.109    0.058   19.161    0.000
    agree_curr1       1.000                           
tidy(fit_cfa_agree_curr) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                      op    label    estimate std.error std.all
   <chr>                     <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 agree_curr1 =~ bf05_47_t1 =~    lambda10   -0.789    0.0444  -0.609
 2 agree_curr1 =~ bf05_37_t1 =~    lambda8    -0.741    0.0435  -0.589
 3 agree_curr1 =~ bf05_22_t1 =~    lambda5    -0.643    0.0425  -0.532
 4 agree_curr1 =~ bf05_12_t1 =~    lambda3    -0.606    0.0439  -0.494
 5 agree_curr1 =~ bf05_27_t1 =~    lambda6     0.595    0.0417   0.506
 6 agree_curr1 =~ bf05_57_t1 =~    lambda12    0.558    0.0430   0.468
 7 agree_curr1 =~ bf05_32_t1 =~    lambda7     0.529    0.0315   0.581
 8 agree_curr1 =~ bf05_02_t1 =~    lambda1     0.483    0.0315   0.540
 9 agree_curr1 =~ bf05_07_t1 =~    lambda2     0.430    0.0250   0.595
10 agree_curr1 =~ bf05_42_t1 =~    lambda9    -0.419    0.0446  -0.351
11 agree_curr1 =~ bf05_52_t1 =~    lambda11    0.418    0.0248   0.585
12 agree_curr1 =~ bf05_17_t1 =~    lambda4    -0.182    0.0554  -0.124

Reverse-code and form parcels:

df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% 
  mutate(bf05_47_t1_r = bf05_47_t1,
         bf05_37_t1_r = bf05_37_t1,
         bf05_22_t1_r = bf05_22_t1,
         bf05_12_t1_r = bf05_12_t1,
         bf05_42_t1_r = bf05_42_t1,
         bf05_17_t1_r = bf05_17_t1,
         bf05_47_t2_r = bf05_47_t2,
         bf05_37_t2_r = bf05_37_t2,
         bf05_22_t2_r = bf05_22_t2,
         bf05_12_t2_r = bf05_12_t2,
         bf05_42_t2_r = bf05_42_t2,
         bf05_17_t2_r = bf05_17_t2,
         bf05_47_t3_r = bf05_47_t3,
         bf05_37_t3_r = bf05_37_t3,
         bf05_22_t3_r = bf05_22_t3,
         bf05_12_t3_r = bf05_12_t3,
         bf05_42_t3_r = bf05_42_t3,
         bf05_17_t3_r = bf05_17_t3) %>% 
  mutate(across(c(bf05_47_t1_r, bf05_37_t1_r, bf05_22_t1_r, bf05_12_t1_r, bf05_42_t1_r, bf05_17_t1_r, 
                  bf05_47_t2_r, bf05_37_t2_r, bf05_22_t2_r, bf05_12_t2_r, bf05_42_t2_r, bf05_17_t2_r, 
                  bf05_47_t3_r, bf05_37_t3_r, bf05_22_t3_r, bf05_12_t3_r, bf05_42_t3_r, bf05_17_t3_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(agree_curr_par1_t1 = rowMeans(across(c(bf05_47_t1_r, bf05_57_t1, bf05_07_t1, bf05_17_t1)), na.rm=T),
         agree_curr_par2_t1 = rowMeans(across(c(bf05_37_t1_r, bf05_27_t1, bf05_02_t1, bf05_52_t1)), na.rm=T),
         agree_curr_par3_t1 = rowMeans(across(c(bf05_22_t1_r, bf05_12_t1_r, bf05_32_t1, bf05_42_t1)), na.rm=T),
         agree_curr_par1_t2 = rowMeans(across(c(bf05_47_t2_r, bf05_57_t2, bf05_07_t2, bf05_17_t2)), na.rm=T),
         agree_curr_par2_t2 = rowMeans(across(c(bf05_37_t2_r, bf05_27_t2, bf05_02_t2, bf05_52_t2)), na.rm=T),
         agree_curr_par3_t2 = rowMeans(across(c(bf05_22_t2_r, bf05_12_t2_r, bf05_32_t2, bf05_42_t2)), na.rm=T),
         agree_curr_par1_t3 = rowMeans(across(c(bf05_47_t3_r, bf05_57_t3, bf05_07_t3, bf05_17_t3)), na.rm=T),
         agree_curr_par2_t3 = rowMeans(across(c(bf05_37_t3_r, bf05_27_t3, bf05_02_t3, bf05_52_t3)), na.rm=T),
         agree_curr_par3_t3 = rowMeans(across(c(bf05_22_t3_r, bf05_12_t3_r, bf05_32_t3, bf05_42_t3)), na.rm=T))

3.2.4 Agreeableness - ideal personality

Check CFA item loadings at T1

cfa_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*bf06_02_t1 + lambda1*bf06_02_t1 + lambda2*bf06_07_t1 + lambda3*bf06_12_t1 + lambda4*bf06_17_t1 + lambda5*bf06_22_t1 + lambda6*bf06_27_t1 + lambda7*bf06_32_t1 + lambda8*bf06_37_t1 + lambda9*bf06_42_t1 + lambda10*bf06_47_t1 + lambda11*bf06_52_t1 + lambda12*bf06_57_t1

# Intercepts
bf06_02_t1 ~ i1*1
bf06_07_t1 ~ 1
bf06_12_t1 ~ 1
bf06_17_t1 ~ 1
bf06_22_t1 ~ 1
bf06_27_t1 ~ 1
bf06_32_t1 ~ 1
bf06_37_t1 ~ 1
bf06_42_t1 ~ 1
bf06_47_t1 ~ 1
bf06_52_t1 ~ 1
bf06_57_t1 ~ 1

# Unique Variances
bf06_02_t1 ~~ bf06_02_t1
bf06_07_t1 ~~ bf06_07_t1
bf06_12_t1 ~~ bf06_12_t1
bf06_17_t1 ~~ bf06_17_t1
bf06_22_t1 ~~ bf06_22_t1
bf06_27_t1 ~~ bf06_27_t1
bf06_32_t1 ~~ bf06_32_t1
bf06_37_t1 ~~ bf06_37_t1
bf06_42_t1 ~~ bf06_42_t1
bf06_47_t1 ~~ bf06_47_t1
bf06_52_t1 ~~ bf06_52_t1
bf06_57_t1 ~~ bf06_57_t1

# Latent Variable Means
agree_ideal1 ~ 0*1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
'
fit_cfa_agree_ideal <- cfa(cfa_agree_ideal, data = df_sbsa2_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_agree_ideal, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 42 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           847         849
  Number of missing patterns                         4            

Model Test User Model:
                                                      
  Test statistic                               233.018
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              2098.126
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.912
  Tucker-Lewis Index (TLI)                       0.892
                                                      
  Robust Comparative Fit Index (CFI)             0.912
  Robust Tucker-Lewis Index (TLI)                0.892

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -13331.073
  Loglikelihood unrestricted model (H1)     -13214.564
                                                      
  Akaike (AIC)                               26734.147
  Bayesian (BIC)                             26904.848
  Sample-size adjusted Bayesian (SABIC)      26790.523

Root Mean Square Error of Approximation:

  RMSEA                                          0.063
  90 Percent confidence interval - lower         0.054
  90 Percent confidence interval - upper         0.071
  P-value H_0: RMSEA <= 0.050                    0.006
  P-value H_0: RMSEA >= 0.080                    0.000
                                                      
  Robust RMSEA                                   0.063
  90 Percent confidence interval - lower         0.055
  90 Percent confidence interval - upper         0.071
  P-value H_0: Robust RMSEA <= 0.050             0.006
  P-value H_0: Robust RMSEA >= 0.080             0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.041

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  agree_ideal1 =~                                     
    b06_02_ (lmb1)    0.528    0.032   16.391    0.000
    b06_07_ (lmb2)    0.365    0.023   15.818    0.000
    b06_12_ (lmb3)   -0.515    0.035  -14.679    0.000
    b06_17_ (lmb4)   -0.143    0.059   -2.413    0.016
    b06_22_ (lmb5)   -0.492    0.037  -13.306    0.000
    b06_27_ (lmb6)    0.612    0.037   16.352    0.000
    b06_32_ (lmb7)    0.509    0.032   15.871    0.000
    b06_37_ (lmb8)   -0.511    0.029  -17.449    0.000
    b06_42_ (lmb9)   -0.462    0.044  -10.587    0.000
    b06_47_ (lm10)   -0.716    0.037  -19.412    0.000
    b06_52_ (lm11)    0.452    0.024   18.543    0.000
    b06_57_ (lm12)    0.496    0.037   13.514    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_02_1 (i1)    4.269    0.032  133.231    0.000
   .bf06_07_1         4.650    0.023  204.363    0.000
   .bf06_12_1         1.913    0.034   55.740    0.000
   .bf06_17_1         2.585    0.054   47.665    0.000
   .bf06_22_1         1.789    0.036   49.972    0.000
   .bf06_27_1         3.911    0.037  104.943    0.000
   .bf06_32_1         4.304    0.032  135.497    0.000
   .bf06_37_1         1.633    0.029   55.361    0.000
   .bf06_42_1         2.758    0.041   66.971    0.000
   .bf06_47_1         1.861    0.038   49.122    0.000
   .bf06_52_1         4.540    0.025  183.437    0.000
   .bf06_57_1         3.787    0.036  106.585    0.000
    agree_dl1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_02_t1        0.590    0.032   18.476    0.000
   .bf06_07_t1        0.305    0.016   18.590    0.000
   .bf06_12_t1        0.731    0.039   18.964    0.000
   .bf06_17_t1        2.468    0.120   20.531    0.000
   .bf06_22_t1        0.842    0.044   19.317    0.000
   .bf06_27_t1        0.801    0.043   18.535    0.000
   .bf06_32_t1        0.593    0.032   18.663    0.000
   .bf06_37_t1        0.474    0.026   18.155    0.000
   .bf06_42_t1        1.220    0.062   19.775    0.000
   .bf06_47_t1        0.701    0.040   17.349    0.000
   .bf06_52_t1        0.314    0.018   17.648    0.000
   .bf06_57_t1        0.822    0.043   19.256    0.000
    agree_ideal1      1.000                           
tidy(fit_cfa_agree_ideal) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                       op    label    estimate std.error std.all
   <chr>                      <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 agree_ideal1 =~ bf06_47_t1 =~    lambda10   -0.716    0.0369 -0.650 
 2 agree_ideal1 =~ bf06_27_t1 =~    lambda6     0.612    0.0374  0.565 
 3 agree_ideal1 =~ bf06_02_t1 =~    lambda1     0.528    0.0322  0.567 
 4 agree_ideal1 =~ bf06_12_t1 =~    lambda3    -0.515    0.0351 -0.516 
 5 agree_ideal1 =~ bf06_37_t1 =~    lambda8    -0.511    0.0293 -0.596 
 6 agree_ideal1 =~ bf06_32_t1 =~    lambda7     0.509    0.0321  0.551 
 7 agree_ideal1 =~ bf06_57_t1 =~    lambda12    0.496    0.0367  0.480 
 8 agree_ideal1 =~ bf06_22_t1 =~    lambda5    -0.492    0.0370 -0.473 
 9 agree_ideal1 =~ bf06_42_t1 =~    lambda9    -0.462    0.0436 -0.386 
10 agree_ideal1 =~ bf06_52_t1 =~    lambda11    0.452    0.0244  0.628 
11 agree_ideal1 =~ bf06_07_t1 =~    lambda2     0.365    0.0230  0.551 
12 agree_ideal1 =~ bf06_17_t1 =~    lambda4    -0.143    0.0594 -0.0909

Reverse-code and form parcels:

df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% 
  mutate(bf06_47_t1_r = bf06_47_t1,
         bf06_37_t1_r = bf06_37_t1,
         bf06_22_t1_r = bf06_22_t1,
         bf06_12_t1_r = bf06_12_t1,
         bf06_42_t1_r = bf06_42_t1,
         bf06_17_t1_r = bf06_17_t1,
         bf06_47_t2_r = bf06_47_t2,
         bf06_37_t2_r = bf06_37_t2,
         bf06_22_t2_r = bf06_22_t2,
         bf06_12_t2_r = bf06_12_t2,
         bf06_42_t2_r = bf06_42_t2,
         bf06_17_t2_r = bf06_17_t2,
         bf06_47_t3_r = bf06_47_t3,
         bf06_37_t3_r = bf06_37_t3,
         bf06_22_t3_r = bf06_22_t3,
         bf06_12_t3_r = bf06_12_t3,
         bf06_42_t3_r = bf06_42_t3,
         bf06_17_t3_r = bf06_17_t3) %>% 
  mutate(across(c(bf06_47_t1_r, bf06_37_t1_r, bf06_22_t1_r, bf06_12_t1_r, bf06_42_t1_r, bf06_17_t1_r, 
                  bf06_47_t2_r, bf06_37_t2_r, bf06_22_t2_r, bf06_12_t2_r, bf06_42_t2_r, bf06_17_t2_r, 
                  bf06_47_t3_r, bf06_37_t3_r, bf06_22_t3_r, bf06_12_t3_r, bf06_42_t3_r, bf06_17_t3_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(agree_ideal_par1_t1 = rowMeans(across(c(bf06_47_t1_r, bf06_32_t1, bf06_42_t1_r, bf06_17_t1_r)), na.rm=T),
         agree_ideal_par2_t1 = rowMeans(across(c(bf06_27_t1, bf06_37_t1_r, bf06_22_t1_r, bf06_07_t1)), na.rm=T),
         agree_ideal_par3_t1 = rowMeans(across(c(bf06_02_t1, bf06_12_t1_r, bf06_57_t1, bf06_52_t1)), na.rm=T),
         agree_ideal_par1_t2 = rowMeans(across(c(bf06_47_t2_r, bf06_32_t2, bf06_42_t2_r, bf06_17_t2_r)), na.rm=T),
         agree_ideal_par2_t2 = rowMeans(across(c(bf06_27_t2, bf06_37_t2_r, bf06_22_t2_r, bf06_07_t2)), na.rm=T),
         agree_ideal_par3_t2 = rowMeans(across(c(bf06_02_t2, bf06_12_t2_r, bf06_57_t2, bf06_52_t2)), na.rm=T),
         agree_ideal_par1_t3 = rowMeans(across(c(bf06_47_t3_r, bf06_32_t3, bf06_42_t3_r, bf06_17_t3_r)), na.rm=T),
         agree_ideal_par2_t3 = rowMeans(across(c(bf06_27_t3, bf06_37_t3_r, bf06_22_t3_r, bf06_07_t3)), na.rm=T),
         agree_ideal_par3_t3 = rowMeans(across(c(bf06_02_t3, bf06_12_t3_r, bf06_57_t3, bf06_52_t3)), na.rm=T))

3.2.5 Conscientiousness - current personality

Check CFA item loadings at T1

cfa_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*bf05_03_t1 + lambda1*bf05_03_t1 + lambda2*bf05_08_t1 + lambda3*bf05_13_t1 + lambda4*bf05_18_t1 + lambda5*bf05_23_t1 + lambda6*bf05_28_t1 + lambda7*bf05_33_t1 + lambda8*bf05_38_t1 + lambda9*bf05_43_t1 + lambda10*bf05_48_t1 + lambda11*bf05_53_t1 + lambda12*bf05_58_t1
# Intercepts
bf05_03_t1 ~ i1*1
bf05_08_t1 ~ 1
bf05_13_t1 ~ 1
bf05_18_t1 ~ 1
bf05_23_t1 ~ 1
bf05_28_t1 ~ 1
bf05_33_t1 ~ 1
bf05_38_t1 ~ 1
bf05_43_t1 ~ 1
bf05_48_t1 ~ 1
bf05_53_t1 ~ 1
bf05_58_t1 ~ 1

# Unique Variances
bf05_03_t1 ~~ bf05_03_t1
bf05_08_t1 ~~ bf05_08_t1
bf05_13_t1 ~~ bf05_13_t1
bf05_18_t1 ~~ bf05_18_t1
bf05_23_t1 ~~ bf05_23_t1
bf05_28_t1 ~~ bf05_28_t1
bf05_33_t1 ~~ bf05_33_t1
bf05_38_t1 ~~ bf05_38_t1
bf05_43_t1 ~~ bf05_43_t1
bf05_48_t1 ~~ bf05_48_t1
bf05_53_t1 ~~ bf05_53_t1
bf05_58_t1 ~~ bf05_58_t1

# Latent Variable Means
consc_curr1 ~ 0*1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
'
fit_cfa_consc_curr <- cfa(cfa_consc_curr, data = df_sbsa2_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_consc_curr, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 39 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           848         849
  Number of missing patterns                         4            

Model Test User Model:
                                                      
  Test statistic                               801.533
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              3586.088
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.788
  Tucker-Lewis Index (TLI)                       0.740
                                                      
  Robust Comparative Fit Index (CFI)             0.788
  Robust Tucker-Lewis Index (TLI)                0.740

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -14696.583
  Loglikelihood unrestricted model (H1)     -14295.816
                                                      
  Akaike (AIC)                               29465.166
  Bayesian (BIC)                             29635.910
  Sample-size adjusted Bayesian (SABIC)      29521.584

Root Mean Square Error of Approximation:

  RMSEA                                          0.128
  90 Percent confidence interval - lower         0.120
  90 Percent confidence interval - upper         0.136
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.128
  90 Percent confidence interval - lower         0.120
  90 Percent confidence interval - upper         0.136
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.073

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  consc_curr1 =~                                      
    b05_03_ (lmb1)    1.014    0.044   23.242    0.000
    b05_08_ (lmb2)    0.808    0.042   19.245    0.000
    b05_13_ (lmb3)   -0.380    0.039   -9.805    0.000
    b05_18_ (lmb4)   -0.733    0.037  -19.560    0.000
    b05_23_ (lmb5)    0.801    0.043   18.440    0.000
    b05_28_ (lmb6)    0.720    0.043   16.786    0.000
    b05_33_ (lmb7)   -0.793    0.037  -21.311    0.000
    b05_38_ (lmb8)   -0.637    0.033  -19.029    0.000
    b05_43_ (lmb9)   -0.470    0.034  -13.894    0.000
    b05_48_ (lm10)    0.719    0.039   18.599    0.000
    b05_53_ (lm11)   -0.634    0.037  -17.019    0.000
    b05_58_ (lm12)    0.684    0.044   15.680    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_03_1 (i1)    2.894    0.048   60.442    0.000
   .bf05_08_1         3.440    0.044   78.102    0.000
   .bf05_13_1         3.625    0.037   97.459    0.000
   .bf05_18_1         3.576    0.039   90.816    0.000
   .bf05_23_1         3.366    0.045   74.573    0.000
   .bf05_28_1         2.879    0.044   65.754    0.000
   .bf05_33_1         3.409    0.040   85.611    0.000
   .bf05_38_1         3.703    0.035  106.023    0.000
   .bf05_43_1         3.986    0.033  119.068    0.000
   .bf05_48_1         2.094    0.040   52.070    0.000
   .bf05_53_1         3.775    0.038   99.069    0.000
   .bf05_58_1         2.769    0.044   62.917    0.000
    cnsc_crr1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_03_t1        0.915    0.054   17.080    0.000
   .bf05_08_t1        0.992    0.054   18.527    0.000
   .bf05_13_t1        1.028    0.051   20.118    0.000
   .bf05_18_t1        0.776    0.042   18.328    0.000
   .bf05_23_t1        1.085    0.058   18.700    0.000
   .bf05_28_t1        1.105    0.058   19.059    0.000
   .bf05_33_t1        0.714    0.040   17.661    0.000
   .bf05_38_t1        0.629    0.034   18.474    0.000
   .bf05_43_t1        0.729    0.037   19.538    0.000
   .bf05_48_t1        0.854    0.046   18.661    0.000
   .bf05_53_t1        0.829    0.044   19.001    0.000
   .bf05_58_t1        1.174    0.061   19.285    0.000
    consc_curr1       1.000                           
tidy(fit_cfa_consc_curr) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                      op    label    estimate std.error std.all
   <chr>                     <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 consc_curr1 =~ bf05_03_t1 =~    lambda1     1.01     0.0436   0.727
 2 consc_curr1 =~ bf05_08_t1 =~    lambda2     0.808    0.0420   0.630
 3 consc_curr1 =~ bf05_23_t1 =~    lambda5     0.801    0.0435   0.610
 4 consc_curr1 =~ bf05_33_t1 =~    lambda7    -0.793    0.0372  -0.684
 5 consc_curr1 =~ bf05_18_t1 =~    lambda4    -0.733    0.0375  -0.640
 6 consc_curr1 =~ bf05_28_t1 =~    lambda6     0.720    0.0429   0.565
 7 consc_curr1 =~ bf05_48_t1 =~    lambda10    0.719    0.0386   0.614
 8 consc_curr1 =~ bf05_58_t1 =~    lambda12    0.684    0.0436   0.534
 9 consc_curr1 =~ bf05_38_t1 =~    lambda8    -0.637    0.0335  -0.626
10 consc_curr1 =~ bf05_53_t1 =~    lambda11   -0.634    0.0373  -0.572
11 consc_curr1 =~ bf05_43_t1 =~    lambda9    -0.470    0.0339  -0.483
12 consc_curr1 =~ bf05_13_t1 =~    lambda3    -0.380    0.0387  -0.351

Reverse-code and form parcels:

df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% 
  mutate(bf05_03_t1_r = bf05_03_t1,
         bf05_23_t1_r = bf05_23_t1,
         bf05_48_t1_r = bf05_48_t1,
         bf05_08_t1_r = bf05_08_t1,
         bf05_28_t1_r = bf05_28_t1,
         bf05_58_t1_r = bf05_58_t1,
         bf05_03_t2_r = bf05_03_t2,
         bf05_23_t2_r = bf05_23_t2,
         bf05_48_t2_r = bf05_48_t2,
         bf05_08_t2_r = bf05_08_t2,
         bf05_28_t2_r = bf05_28_t2,
         bf05_58_t2_r = bf05_58_t2,
         bf05_03_t3_r = bf05_03_t3,
         bf05_23_t3_r = bf05_23_t3,
         bf05_48_t3_r = bf05_48_t3,
         bf05_08_t3_r = bf05_08_t3,
         bf05_28_t3_r = bf05_28_t3,
         bf05_58_t3_r = bf05_58_t3) %>% 
  mutate(across(c(bf05_03_t1_r, bf05_23_t1_r, bf05_48_t1_r, bf05_08_t1_r, bf05_28_t1_r, bf05_58_t1_r,
                  bf05_03_t2_r, bf05_23_t2_r, bf05_48_t2_r, bf05_08_t2_r, bf05_28_t2_r, bf05_58_t2_r,
                  bf05_03_t3_r, bf05_23_t3_r, bf05_48_t3_r, bf05_08_t3_r, bf05_28_t3_r, bf05_58_t3_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(consc_curr_par1_t1 = rowMeans(across(c(bf05_03_t1_r, bf05_28_t1_r, bf05_38_t1, bf05_13_t1)), na.rm=T),
         consc_curr_par2_t1 = rowMeans(across(c(bf05_08_t1_r, bf05_18_t1, bf05_58_t1_r, bf05_43_t1)), na.rm=T),
         consc_curr_par3_t1 = rowMeans(across(c(bf05_23_t1_r, bf05_33_t1, bf05_48_t1_r, bf05_53_t1)), na.rm=T),
         consc_curr_par1_t2 = rowMeans(across(c(bf05_03_t2_r, bf05_28_t2_r, bf05_38_t2, bf05_13_t2)), na.rm=T),
         consc_curr_par2_t2 = rowMeans(across(c(bf05_08_t2_r, bf05_18_t2, bf05_58_t2_r, bf05_43_t2)), na.rm=T),
         consc_curr_par3_t2 = rowMeans(across(c(bf05_23_t2_r, bf05_33_t2, bf05_48_t2_r, bf05_53_t2)), na.rm=T),
         consc_curr_par1_t3 = rowMeans(across(c(bf05_03_t3_r, bf05_28_t3_r, bf05_38_t3, bf05_13_t3)), na.rm=T),
         consc_curr_par2_t3 = rowMeans(across(c(bf05_08_t3_r, bf05_18_t3, bf05_58_t3_r, bf05_43_t3)), na.rm=T),
         consc_curr_par3_t3 = rowMeans(across(c(bf05_23_t3_r, bf05_33_t3, bf05_48_t3_r, bf05_53_t3)), na.rm=T))

3.2.6 Conscientiousness - ideal personality

Check CFA item loadings at T1

cfa_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*bf06_03_t1 + lambda1*bf06_03_t1 + lambda2*bf06_08_t1 + lambda3*bf06_13_t1 + lambda4*bf06_18_t1 + lambda5*bf06_23_t1 + lambda6*bf06_28_t1 + lambda7*bf06_33_t1 + lambda8*bf06_38_t1 + lambda9*bf06_43_t1 + lambda10*bf06_48_t1 + lambda11*bf06_53_t1 + lambda12*bf06_58_t1
# Intercepts
bf06_03_t1 ~ i1*1
bf06_08_t1 ~ 1
bf06_13_t1 ~ 1
bf06_18_t1 ~ 1
bf06_23_t1 ~ 1
bf06_28_t1 ~ 1
bf06_33_t1 ~ 1
bf06_38_t1 ~ 1
bf06_43_t1 ~ 1
bf06_48_t1 ~ 1
bf06_53_t1 ~ 1
bf06_58_t1 ~ 1

# Unique Variances
bf06_03_t1 ~~ bf06_03_t1
bf06_08_t1 ~~ bf06_08_t1
bf06_13_t1 ~~ bf06_13_t1
bf06_18_t1 ~~ bf06_18_t1
bf06_23_t1 ~~ bf06_23_t1
bf06_28_t1 ~~ bf06_28_t1
bf06_33_t1 ~~ bf06_33_t1
bf06_38_t1 ~~ bf06_38_t1
bf06_43_t1 ~~ bf06_43_t1
bf06_48_t1 ~~ bf06_48_t1
bf06_53_t1 ~~ bf06_53_t1
bf06_58_t1 ~~ bf06_58_t1

# Latent Variable Means
consc_ideal1 ~ 0*1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
'
fit_cfa_consc_ideal <- cfa(cfa_consc_ideal, data = df_sbsa2_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_consc_ideal, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 41 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           848         849
  Number of missing patterns                         5            

Model Test User Model:
                                                      
  Test statistic                               261.132
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              2186.521
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.902
  Tucker-Lewis Index (TLI)                       0.881
                                                      
  Robust Comparative Fit Index (CFI)             0.902
  Robust Tucker-Lewis Index (TLI)                0.880

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -11827.022
  Loglikelihood unrestricted model (H1)     -11696.456
                                                      
  Akaike (AIC)                               23726.045
  Bayesian (BIC)                             23896.788
  Sample-size adjusted Bayesian (SABIC)      23782.463

Root Mean Square Error of Approximation:

  RMSEA                                          0.067
  90 Percent confidence interval - lower         0.059
  90 Percent confidence interval - upper         0.076
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    0.005
                                                      
  Robust RMSEA                                   0.067
  90 Percent confidence interval - lower         0.059
  90 Percent confidence interval - upper         0.076
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             0.006

Standardized Root Mean Square Residual:

  SRMR                                           0.044

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  consc_ideal1 =~                                     
    b06_03_ (lmb1)    0.441    0.042   10.435    0.000
    b06_08_ (lmb2)    0.412    0.032   12.845    0.000
    b06_13_ (lmb3)   -0.368    0.042   -8.845    0.000
    b06_18_ (lmb4)   -0.417    0.028  -14.929    0.000
    b06_23_ (lmb5)    0.451    0.029   15.561    0.000
    b06_28_ (lmb6)    0.577    0.035   16.264    0.000
    b06_33_ (lmb7)   -0.403    0.026  -15.487    0.000
    b06_38_ (lmb8)   -0.445    0.023  -19.306    0.000
    b06_43_ (lmb9)   -0.419    0.025  -16.913    0.000
    b06_48_ (lm10)    0.419    0.027   15.427    0.000
    b06_53_ (lm11)   -0.433    0.021  -20.174    0.000
    b06_58_ (lm12)    0.494    0.034   14.373    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_03_1 (i1)    1.718    0.040   42.978    0.000
   .bf06_08_1         1.606    0.031   51.992    0.000
   .bf06_13_1         4.196    0.039  107.674    0.000
   .bf06_18_1         4.352    0.027  158.625    0.000
   .bf06_23_1         1.488    0.029   51.993    0.000
   .bf06_28_1         1.857    0.035   52.569    0.000
   .bf06_33_1         4.460    0.026  173.589    0.000
   .bf06_38_1         4.642    0.024  195.735    0.000
   .bf06_43_1         4.565    0.025  183.655    0.000
   .bf06_48_1         1.378    0.027   51.299    0.000
   .bf06_53_1         4.632    0.022  207.973    0.000
   .bf06_58_1         1.775    0.034   52.825    0.000
    consc_dl1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_03_t1        1.157    0.058   19.844    0.000
   .bf06_08_t1        0.637    0.033   19.365    0.000
   .bf06_13_t1        1.151    0.057   20.076    0.000
   .bf06_18_t1        0.463    0.024   18.963    0.000
   .bf06_23_t1        0.489    0.026   18.752    0.000
   .bf06_28_t1        0.723    0.039   18.580    0.000
   .bf06_33_t1        0.396    0.021   18.785    0.000
   .bf06_38_t1        0.278    0.016   17.526    0.000
   .bf06_43_t1        0.347    0.019   18.385    0.000
   .bf06_48_t1        0.435    0.023   18.877    0.000
   .bf06_53_t1        0.232    0.014   17.105    0.000
   .bf06_58_t1        0.711    0.037   19.097    0.000
    consc_ideal1      1.000                           
tidy(fit_cfa_consc_ideal) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                       op    label    estimate std.error std.all
   <chr>                      <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 consc_ideal1 =~ bf06_28_t1 =~    lambda6     0.577    0.0355   0.562
 2 consc_ideal1 =~ bf06_58_t1 =~    lambda12    0.494    0.0344   0.505
 3 consc_ideal1 =~ bf06_23_t1 =~    lambda5     0.451    0.0290   0.542
 4 consc_ideal1 =~ bf06_38_t1 =~    lambda8    -0.445    0.0231  -0.645
 5 consc_ideal1 =~ bf06_03_t1 =~    lambda1     0.441    0.0422   0.379
 6 consc_ideal1 =~ bf06_53_t1 =~    lambda11   -0.433    0.0215  -0.668
 7 consc_ideal1 =~ bf06_43_t1 =~    lambda9    -0.419    0.0248  -0.580
 8 consc_ideal1 =~ bf06_48_t1 =~    lambda10    0.419    0.0272   0.536
 9 consc_ideal1 =~ bf06_18_t1 =~    lambda4    -0.417    0.0279  -0.522
10 consc_ideal1 =~ bf06_08_t1 =~    lambda2     0.412    0.0321   0.459
11 consc_ideal1 =~ bf06_33_t1 =~    lambda7    -0.403    0.0260  -0.539
12 consc_ideal1 =~ bf06_13_t1 =~    lambda3    -0.368    0.0416  -0.324

Reverse-code and form parcels:

df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% 
  mutate(bf06_03_t1_r = bf06_03_t1,
         bf06_23_t1_r = bf06_23_t1,
         bf06_48_t1_r = bf06_48_t1,
         bf06_08_t1_r = bf06_08_t1,
         bf06_28_t1_r = bf06_28_t1,
         bf06_58_t1_r = bf06_58_t1,
         bf06_03_t2_r = bf06_03_t2,
         bf06_23_t2_r = bf06_23_t2,
         bf06_48_t2_r = bf06_48_t2,
         bf06_08_t2_r = bf06_08_t2,
         bf06_28_t2_r = bf06_28_t2,
         bf06_58_t2_r = bf06_58_t2,
         bf06_03_t3_r = bf06_03_t3,
         bf06_23_t3_r = bf06_23_t3,
         bf06_48_t3_r = bf06_48_t3,
         bf06_08_t3_r = bf06_08_t3,
         bf06_28_t3_r = bf06_28_t3,
         bf06_58_t3_r = bf06_58_t3) %>% 
  mutate(across(c(bf06_03_t1_r, bf06_23_t1_r, bf06_48_t1_r, bf06_08_t1_r, bf06_28_t1_r, bf06_58_t1_r,
                  bf06_03_t2_r, bf06_23_t2_r, bf06_48_t2_r, bf06_08_t2_r, bf06_28_t2_r, bf06_58_t2_r,
                  bf06_03_t3_r, bf06_23_t3_r, bf06_48_t3_r, bf06_08_t3_r, bf06_28_t3_r, bf06_58_t3_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(consc_ideal_par1_t1 = rowMeans(across(c(bf06_28_t1_r, bf06_53_t1, bf06_18_t1, bf06_13_t1)), na.rm=T),
         consc_ideal_par2_t1 = rowMeans(across(c(bf06_58_t1_r, bf06_03_t1_r, bf06_48_t1_r, bf06_33_t1)), na.rm=T),
         consc_ideal_par3_t1 = rowMeans(across(c(bf06_23_t1_r, bf06_38_t1, bf06_43_t1, bf06_08_t1_r)), na.rm=T),
         consc_ideal_par1_t2 = rowMeans(across(c(bf06_28_t2_r, bf06_53_t2, bf06_18_t2, bf06_13_t2)), na.rm=T),
         consc_ideal_par2_t2 = rowMeans(across(c(bf06_58_t2_r, bf06_03_t2_r, bf06_48_t2_r, bf06_33_t2)), na.rm=T),
         consc_ideal_par3_t2 = rowMeans(across(c(bf06_23_t2_r, bf06_38_t2, bf06_43_t2, bf06_08_t2_r)), na.rm=T),
         consc_ideal_par1_t3 = rowMeans(across(c(bf06_28_t3_r, bf06_53_t3, bf06_18_t3, bf06_13_t3)), na.rm=T),
         consc_ideal_par2_t3 = rowMeans(across(c(bf06_58_t3_r, bf06_03_t3_r, bf06_48_t3_r, bf06_33_t3)), na.rm=T),
         consc_ideal_par3_t3 = rowMeans(across(c(bf06_23_t3_r, bf06_38_t3, bf06_43_t3, bf06_08_t3_r)), na.rm=T))

3.2.7 Neuroticism - current personality

Check CFA item loadings at T1

cfa_neuro_curr <- '
#| warning: false

# Define the latent factors
neuro_curr1 =~ NA*bf05_04_t1 + lambda1*bf05_04_t1 + lambda2*bf05_09_t1 + lambda3*bf05_14_t1 + lambda4*bf05_19_t1 + lambda5*bf05_24_t1 + lambda6*bf05_29_t1 + lambda7*bf05_34_t1 + lambda8*bf05_39_t1 + lambda9*bf05_44_t1 + lambda10*bf05_49_t1 + lambda11*bf05_54_t1 + lambda12*bf05_59_t1

# Intercepts
bf05_04_t1 ~ i1*1
bf05_09_t1 ~ 1
bf05_14_t1 ~ 1
bf05_19_t1 ~ 1
bf05_24_t1 ~ 1
bf05_29_t1 ~ 1
bf05_34_t1 ~ 1
bf05_39_t1 ~ 1
bf05_44_t1 ~ 1
bf05_49_t1 ~ 1
bf05_54_t1 ~ 1
bf05_59_t1 ~ 1

# Unique Variances
bf05_04_t1 ~~ bf05_04_t1
bf05_09_t1 ~~ bf05_09_t1
bf05_14_t1 ~~ bf05_14_t1
bf05_19_t1 ~~ bf05_19_t1
bf05_24_t1 ~~ bf05_24_t1
bf05_29_t1 ~~ bf05_29_t1
bf05_34_t1 ~~ bf05_34_t1
bf05_39_t1 ~~ bf05_39_t1
bf05_44_t1 ~~ bf05_44_t1
bf05_49_t1 ~~ bf05_49_t1
bf05_54_t1 ~~ bf05_54_t1
bf05_59_t1 ~~ bf05_59_t1

# Latent Variable Means
neuro_curr1 ~ 0*1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
'
fit_cfa_neuro_curr <- cfa(cfa_neuro_curr, data = df_sbsa2_wide_pers, mimic = "mplus", missing="ML")
Warning in lav_data_full(data = data, group = group, cluster = cluster, : lavaan WARNING: some cases are empty and will be ignored:
  611
summary(fit_cfa_neuro_curr, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 35 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           848         849
  Number of missing patterns                         4            

Model Test User Model:
                                                      
  Test statistic                               680.474
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              4495.728
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.859
  Tucker-Lewis Index (TLI)                       0.827
                                                      
  Robust Comparative Fit Index (CFI)             0.858
  Robust Tucker-Lewis Index (TLI)                0.827

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -14759.163
  Loglikelihood unrestricted model (H1)     -14418.926
                                                      
  Akaike (AIC)                               29590.325
  Bayesian (BIC)                             29761.069
  Sample-size adjusted Bayesian (SABIC)      29646.744

Root Mean Square Error of Approximation:

  RMSEA                                          0.117
  90 Percent confidence interval - lower         0.109
  90 Percent confidence interval - upper         0.125
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.117
  90 Percent confidence interval - lower         0.109
  90 Percent confidence interval - upper         0.125
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.055

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  neuro_curr1 =~                                      
    b05_04_ (lmb1)    0.904    0.041   22.165    0.000
    b05_09_ (lmb2)    0.758    0.039   19.533    0.000
    b05_14_ (lmb3)   -0.901    0.042  -21.239    0.000
    b05_19_ (lmb4)   -0.624    0.035  -17.726    0.000
    b05_24_ (lmb5)    0.755    0.040   18.667    0.000
    b05_29_ (lmb6)    0.906    0.038   23.588    0.000
    b05_34_ (lmb7)   -0.806    0.037  -22.003    0.000
    b05_39_ (lmb8)   -0.921    0.040  -23.031    0.000
    b05_44_ (lmb9)    0.806    0.039   20.762    0.000
    b05_49_ (lm10)    0.623    0.041   15.315    0.000
    b05_54_ (lm11)   -0.996    0.043  -23.246    0.000
    b05_59_ (lm12)   -0.814    0.042  -19.249    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_04_1 (i1)    2.755    0.045   61.511    0.000
   .bf05_09_1         2.933    0.041   70.774    0.000
   .bf05_14_1         3.152    0.046   68.350    0.000
   .bf05_19_1         3.588    0.037   97.236    0.000
   .bf05_24_1         3.017    0.043   70.486    0.000
   .bf05_29_1         2.977    0.043   69.428    0.000
   .bf05_34_1         3.879    0.040   96.548    0.000
   .bf05_39_1         3.303    0.044   74.777    0.000
   .bf05_44_1         3.210    0.042   76.710    0.000
   .bf05_49_1         2.342    0.042   56.155    0.000
   .bf05_54_1         3.249    0.047   68.523    0.000
   .bf05_59_1         3.128    0.045   69.737    0.000
    neur_crr1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_04_t1        0.882    0.048   18.423    0.000
   .bf05_09_t1        0.880    0.046   19.093    0.000
   .bf05_14_t1        0.992    0.053   18.707    0.000
   .bf05_19_t1        0.765    0.039   19.447    0.000
   .bf05_24_t1        0.982    0.051   19.257    0.000
   .bf05_29_t1        0.736    0.041   17.947    0.000
   .bf05_34_t1        0.719    0.039   18.497    0.000
   .bf05_39_t1        0.806    0.045   17.863    0.000
   .bf05_44_t1        0.834    0.045   18.629    0.000
   .bf05_49_t1        1.084    0.055   19.757    0.000
   .bf05_54_t1        0.915    0.052   17.759    0.000
   .bf05_59_t1        1.042    0.055   18.985    0.000
    neuro_curr1       1.000                           
tidy(fit_cfa_neuro_curr) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                      op    label    estimate std.error std.all
   <chr>                     <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 neuro_curr1 =~ bf05_54_t1 =~    lambda11   -0.996    0.0428  -0.721
 2 neuro_curr1 =~ bf05_39_t1 =~    lambda8    -0.921    0.0400  -0.716
 3 neuro_curr1 =~ bf05_29_t1 =~    lambda6     0.906    0.0384   0.726
 4 neuro_curr1 =~ bf05_04_t1 =~    lambda1     0.904    0.0408   0.693
 5 neuro_curr1 =~ bf05_14_t1 =~    lambda3    -0.901    0.0424  -0.671
 6 neuro_curr1 =~ bf05_59_t1 =~    lambda12   -0.814    0.0423  -0.624
 7 neuro_curr1 =~ bf05_34_t1 =~    lambda7    -0.806    0.0366  -0.689
 8 neuro_curr1 =~ bf05_44_t1 =~    lambda9     0.806    0.0388   0.662
 9 neuro_curr1 =~ bf05_09_t1 =~    lambda2     0.758    0.0388   0.628
10 neuro_curr1 =~ bf05_24_t1 =~    lambda5     0.755    0.0405   0.606
11 neuro_curr1 =~ bf05_19_t1 =~    lambda4    -0.624    0.0352  -0.581
12 neuro_curr1 =~ bf05_49_t1 =~    lambda10    0.623    0.0407   0.514

Reverse-code and form parcels:

df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% 
  mutate(bf05_29_t1_r = bf05_29_t1,
         bf05_04_t1_r = bf05_04_t1,
         bf05_24_t1_r = bf05_24_t1,
         bf05_44_t1_r = bf05_44_t1,
         bf05_09_t1_r = bf05_09_t1,
         bf05_49_t1_r = bf05_49_t1,
         bf05_29_t2_r = bf05_29_t2,
         bf05_04_t2_r = bf05_04_t2,
         bf05_24_t2_r = bf05_24_t2,
         bf05_44_t2_r = bf05_44_t2,
         bf05_09_t2_r = bf05_09_t2,
         bf05_49_t2_r = bf05_49_t2,
         bf05_29_t3_r = bf05_29_t3,
         bf05_04_t3_r = bf05_04_t3,
         bf05_24_t3_r = bf05_24_t3,
         bf05_44_t3_r = bf05_44_t3,
         bf05_09_t3_r = bf05_09_t3,
         bf05_49_t3_r = bf05_49_t3) %>% 
  mutate(across(c(bf05_29_t1_r, bf05_04_t1_r, bf05_24_t1_r, bf05_44_t1_r, bf05_09_t1_r, bf05_49_t1_r, 
                  bf05_29_t2_r, bf05_04_t2_r, bf05_24_t2_r, bf05_44_t2_r, bf05_09_t2_r, bf05_49_t2_r, 
                  bf05_29_t3_r, bf05_04_t3_r, bf05_24_t3_r, bf05_44_t3_r, bf05_09_t3_r, bf05_49_t3_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(neuro_curr_par1_t1 = rowMeans(across(c(bf05_54_t1, bf05_59_t1, bf05_09_t1_r, bf05_49_t1_r)), na.rm=T),
         neuro_curr_par2_t1 = rowMeans(across(c(bf05_39_t1, bf05_14_t1, bf05_44_t1_r, bf05_19_t1)), na.rm=T),
         neuro_curr_par3_t1 = rowMeans(across(c(bf05_29_t1_r, bf05_04_t1_r, bf05_34_t1, bf05_24_t1_r)), na.rm=T),
         neuro_curr_par1_t2 = rowMeans(across(c(bf05_54_t2, bf05_59_t2, bf05_09_t2_r, bf05_49_t2_r)), na.rm=T),
         neuro_curr_par2_t2 = rowMeans(across(c(bf05_39_t2, bf05_14_t2, bf05_44_t2_r, bf05_19_t2)), na.rm=T),
         neuro_curr_par3_t2 = rowMeans(across(c(bf05_29_t2_r, bf05_04_t2_r, bf05_34_t2, bf05_24_t2_r)), na.rm=T),
         neuro_curr_par1_t3 = rowMeans(across(c(bf05_54_t3, bf05_59_t3, bf05_09_t3_r, bf05_49_t3_r)), na.rm=T),
         neuro_curr_par2_t3 = rowMeans(across(c(bf05_39_t3, bf05_14_t3, bf05_44_t3_r, bf05_19_t3)), na.rm=T),
         neuro_curr_par3_t3 = rowMeans(across(c(bf05_29_t3_r, bf05_04_t3_r, bf05_34_t3, bf05_24_t3_r)), na.rm=T))

3.2.8 Neuroticism - ideal personality

Check CFA item loadings at T1

cfa_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*bf06_04_t1 + lambda1*bf06_04_t1 + lambda2*bf06_09_t1 + lambda3*bf06_14_t1 + lambda4*bf06_19_t1 + lambda5*bf06_24_t1 + lambda6*bf06_29_t1 + lambda7*bf06_34_t1 + lambda8*bf06_39_t1 + lambda9*bf06_44_t1 + lambda10*bf06_49_t1 + lambda11*bf06_54_t1 + lambda12*bf06_59_t1

# Intercepts
bf06_04_t1 ~ i1*1
bf06_09_t1 ~ 1
bf06_14_t1 ~ 1
bf06_19_t1 ~ 1
bf06_24_t1 ~ 1
bf06_29_t1 ~ 1
bf06_34_t1 ~ 1
bf06_39_t1 ~ 1
bf06_44_t1 ~ 1
bf06_49_t1 ~ 1
bf06_54_t1 ~ 1
bf06_59_t1 ~ 1

# Unique Variances
bf06_04_t1 ~~ bf06_04_t1
bf06_09_t1 ~~ bf06_09_t1
bf06_14_t1 ~~ bf06_14_t1
bf06_19_t1 ~~ bf06_19_t1
bf06_24_t1 ~~ bf06_24_t1
bf06_29_t1 ~~ bf06_29_t1
bf06_34_t1 ~~ bf06_34_t1
bf06_39_t1 ~~ bf06_39_t1
bf06_44_t1 ~~ bf06_44_t1
bf06_49_t1 ~~ bf06_49_t1
bf06_54_t1 ~~ bf06_54_t1
bf06_59_t1 ~~ bf06_59_t1

# Latent Variable Means
neuro_ideal1 ~ 0*1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
'
fit_cfa_neuro_ideal <- cfa(cfa_neuro_ideal, data = df_sbsa2_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_neuro_ideal, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 41 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           848         849
  Number of missing patterns                         5            

Model Test User Model:
                                                      
  Test statistic                               273.694
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              2229.774
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.898
  Tucker-Lewis Index (TLI)                       0.876
                                                      
  Robust Comparative Fit Index (CFI)             0.898
  Robust Tucker-Lewis Index (TLI)                0.876

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -12149.997
  Loglikelihood unrestricted model (H1)     -12013.150
                                                      
  Akaike (AIC)                               24371.994
  Bayesian (BIC)                             24542.738
  Sample-size adjusted Bayesian (SABIC)      24428.413

Root Mean Square Error of Approximation:

  RMSEA                                          0.069
  90 Percent confidence interval - lower         0.061
  90 Percent confidence interval - upper         0.078
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    0.016
                                                      
  Robust RMSEA                                   0.069
  90 Percent confidence interval - lower         0.061
  90 Percent confidence interval - upper         0.078
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             0.017

Standardized Root Mean Square Residual:

  SRMR                                           0.042

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  neuro_ideal1 =~                                     
    b06_04_ (lmb1)    0.311    0.027   11.743    0.000
    b06_09_ (lmb2)    0.430    0.026   16.554    0.000
    b06_14_ (lmb3)   -0.492    0.028  -17.268    0.000
    b06_19_ (lmb4)   -0.525    0.032  -16.181    0.000
    b06_24_ (lmb5)    0.355    0.025   14.392    0.000
    b06_29_ (lmb6)    0.409    0.039   10.403    0.000
    b06_34_ (lmb7)   -0.548    0.032  -16.987    0.000
    b06_39_ (lmb8)   -0.524    0.027  -19.366    0.000
    b06_44_ (lmb9)    0.462    0.027   16.874    0.000
    b06_49_ (lm10)    0.321    0.051    6.247    0.000
    b06_54_ (lm11)   -0.533    0.026  -20.319    0.000
    b06_59_ (lm12)   -0.479    0.035  -13.698    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_04_1 (i1)    4.549    0.025  178.914    0.000
   .bf06_09_1         4.441    0.026  170.833    0.000
   .bf06_14_1         1.609    0.029   56.032    0.000
   .bf06_19_1         1.985    0.032   61.253    0.000
   .bf06_24_1         4.664    0.024  193.333    0.000
   .bf06_29_1         4.251    0.037  114.255    0.000
   .bf06_34_1         1.816    0.032   55.945    0.000
   .bf06_39_1         1.565    0.028   56.296    0.000
   .bf06_44_1         4.425    0.027  161.125    0.000
   .bf06_49_1         3.816    0.048   80.268    0.000
   .bf06_54_1         1.468    0.027   53.906    0.000
   .bf06_59_1         1.903    0.034   56.042    0.000
    neuro_dl1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_04_t1        0.451    0.023   19.693    0.000
   .bf06_09_t1        0.387    0.021   18.568    0.000
   .bf06_14_t1        0.455    0.025   18.321    0.000
   .bf06_19_t1        0.612    0.033   18.691    0.000
   .bf06_24_t1        0.366    0.019   19.077    0.000
   .bf06_29_t1        1.005    0.051   19.860    0.000
   .bf06_34_t1        0.591    0.032   18.447    0.000
   .bf06_39_t1        0.379    0.022   17.415    0.000
   .bf06_44_t1        0.425    0.023   18.437    0.000
   .bf06_49_t1        1.811    0.089   20.344    0.000
   .bf06_54_t1        0.344    0.020   17.009    0.000
   .bf06_59_t1        0.747    0.039   19.249    0.000
    neuro_ideal1      1.000                           
tidy(fit_cfa_neuro_ideal) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                       op    label    estimate std.error std.all
   <chr>                      <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 neuro_ideal1 =~ bf06_34_t1 =~    lambda7    -0.548    0.0323  -0.581
 2 neuro_ideal1 =~ bf06_54_t1 =~    lambda11   -0.533    0.0262  -0.672
 3 neuro_ideal1 =~ bf06_19_t1 =~    lambda4    -0.525    0.0325  -0.558
 4 neuro_ideal1 =~ bf06_39_t1 =~    lambda8    -0.524    0.0271  -0.648
 5 neuro_ideal1 =~ bf06_14_t1 =~    lambda3    -0.492    0.0285  -0.589
 6 neuro_ideal1 =~ bf06_59_t1 =~    lambda12   -0.479    0.0349  -0.484
 7 neuro_ideal1 =~ bf06_44_t1 =~    lambda9     0.462    0.0274   0.579
 8 neuro_ideal1 =~ bf06_09_t1 =~    lambda2     0.430    0.0260   0.569
 9 neuro_ideal1 =~ bf06_29_t1 =~    lambda6     0.409    0.0393   0.378
10 neuro_ideal1 =~ bf06_24_t1 =~    lambda5     0.355    0.0247   0.506
11 neuro_ideal1 =~ bf06_49_t1 =~    lambda10    0.321    0.0513   0.232
12 neuro_ideal1 =~ bf06_04_t1 =~    lambda1     0.311    0.0265   0.421

Reverse-code and form parcels:

df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% 
  mutate(bf06_29_t1_r = bf06_29_t1,
         bf06_04_t1_r = bf06_04_t1,
         bf06_24_t1_r = bf06_24_t1,
         bf06_44_t1_r = bf06_44_t1,
         bf06_09_t1_r = bf06_09_t1,
         bf06_49_t1_r = bf06_49_t1,
         bf06_29_t2_r = bf06_29_t2,
         bf06_04_t2_r = bf06_04_t2,
         bf06_24_t2_r = bf06_24_t2,
         bf06_44_t2_r = bf06_44_t2,
         bf06_09_t2_r = bf06_09_t2,
         bf06_49_t2_r = bf06_49_t2,
         bf06_29_t3_r = bf06_29_t3,
         bf06_04_t3_r = bf06_04_t3,
         bf06_24_t3_r = bf06_24_t3,
         bf06_44_t3_r = bf06_44_t3,
         bf06_09_t3_r = bf06_09_t3,
         bf06_49_t3_r = bf06_49_t3) %>% 
  mutate(across(c(bf06_29_t1_r, bf06_04_t1_r, bf06_24_t1_r, bf06_44_t1_r, bf06_09_t1_r, bf06_49_t1_r, 
                  bf06_29_t2_r, bf06_04_t2_r, bf06_24_t2_r, bf06_44_t2_r, bf06_09_t2_r, bf06_49_t2_r, 
                  bf06_29_t3_r, bf06_04_t3_r, bf06_24_t3_r, bf06_44_t3_r, bf06_09_t3_r, bf06_49_t3_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(neuro_ideal_par1_t1 = rowMeans(across(c(bf06_34_t1, bf06_59_t1, bf06_29_t1_r, bf06_04_t1_r)), na.rm=T),
         neuro_ideal_par2_t1 = rowMeans(across(c(bf06_54_t1, bf06_14_t1, bf06_09_t1_r, bf06_49_t1_r)), na.rm=T),
         neuro_ideal_par3_t1 = rowMeans(across(c(bf06_19_t1, bf06_39_t1, bf06_44_t1_r, bf06_24_t1_r)), na.rm=T),
         neuro_ideal_par1_t2 = rowMeans(across(c(bf06_34_t2, bf06_59_t2, bf06_29_t2_r, bf06_04_t2_r)), na.rm=T),
         neuro_ideal_par2_t2 = rowMeans(across(c(bf06_54_t2, bf06_14_t2, bf06_09_t2_r, bf06_49_t2_r)), na.rm=T),
         neuro_ideal_par3_t2 = rowMeans(across(c(bf06_19_t2, bf06_39_t2, bf06_44_t2_r, bf06_24_t2_r)), na.rm=T),
         neuro_ideal_par1_t3 = rowMeans(across(c(bf06_34_t3, bf06_59_t3, bf06_29_t3_r, bf06_04_t3_r)), na.rm=T),
         neuro_ideal_par2_t3 = rowMeans(across(c(bf06_54_t3, bf06_14_t3, bf06_09_t3_r, bf06_49_t3_r)), na.rm=T),
         neuro_ideal_par3_t3 = rowMeans(across(c(bf06_19_t3, bf06_39_t3, bf06_44_t3_r, bf06_24_t3_r)), na.rm=T))

3.2.9 Openness - current personality

Check CFA item loadings at T1

cfa_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*bf05_05_t1 + lambda1*bf05_05_t1 + lambda2*bf05_10_t1 + lambda3*bf05_15_t1 + lambda4*bf05_20_t1 + lambda5*bf05_25_t1 + lambda6*bf05_30_t1 + lambda7*bf05_35_t1 + lambda8*bf05_40_t1 + lambda9*bf05_45_t1 + lambda10*bf05_50_t1 + lambda11*bf05_55_t1 + lambda12*bf05_60_t1

# Intercepts
bf05_05_t1 ~ i1*1
bf05_10_t1 ~ 1
bf05_15_t1 ~ 1
bf05_20_t1 ~ 1
bf05_25_t1 ~ 1
bf05_30_t1 ~ 1
bf05_35_t1 ~ 1
bf05_40_t1 ~ 1
bf05_45_t1 ~ 1
bf05_50_t1 ~ 1
bf05_55_t1 ~ 1
bf05_60_t1 ~ 1

# Unique Variances
bf05_05_t1 ~~ bf05_05_t1
bf05_10_t1 ~~ bf05_10_t1
bf05_15_t1 ~~ bf05_15_t1
bf05_20_t1 ~~ bf05_20_t1
bf05_25_t1 ~~ bf05_25_t1
bf05_30_t1 ~~ bf05_30_t1
bf05_35_t1 ~~ bf05_35_t1
bf05_40_t1 ~~ bf05_40_t1
bf05_45_t1 ~~ bf05_45_t1
bf05_50_t1 ~~ bf05_50_t1
bf05_55_t1 ~~ bf05_55_t1
bf05_60_t1 ~~ bf05_60_t1

# Latent Variable Means
openn_curr1 ~ 0*1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
'
fit_cfa_openn_curr <- cfa(cfa_openn_curr, data = df_sbsa2_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_openn_curr, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 37 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           848         849
  Number of missing patterns                         2            

Model Test User Model:
                                                      
  Test statistic                               686.354
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              2445.809
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.734
  Tucker-Lewis Index (TLI)                       0.675
                                                      
  Robust Comparative Fit Index (CFI)             0.734
  Robust Tucker-Lewis Index (TLI)                0.675

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -14957.504
  Loglikelihood unrestricted model (H1)     -14614.327
                                                      
  Akaike (AIC)                               29987.007
  Bayesian (BIC)                             30157.751
  Sample-size adjusted Bayesian (SABIC)      30043.426

Root Mean Square Error of Approximation:

  RMSEA                                          0.118
  90 Percent confidence interval - lower         0.110
  90 Percent confidence interval - upper         0.125
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.118
  90 Percent confidence interval - lower         0.110
  90 Percent confidence interval - upper         0.126
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.071

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  openn_curr1 =~                                      
    b05_05_ (lmb1)    0.291    0.050    5.788    0.000
    b05_10_ (lmb2)   -0.455    0.033  -13.723    0.000
    b05_15_ (lmb3)   -0.517    0.038  -13.574    0.000
    b05_20_ (lmb4)   -0.756    0.042  -18.203    0.000
    b05_25_ (lmb5)    0.565    0.046   12.321    0.000
    b05_30_ (lmb6)    0.622    0.044   14.134    0.000
    b05_35_ (lmb7)   -0.688    0.037  -18.439    0.000
    b05_40_ (lmb8)   -0.546    0.036  -15.159    0.000
    b05_45_ (lmb9)    0.562    0.042   13.394    0.000
    b05_50_ (lm10)    0.700    0.048   14.469    0.000
    b05_55_ (lm11)    0.623    0.044   14.239    0.000
    b05_60_ (lm12)   -0.597    0.038  -15.746    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_05_1 (i1)    2.927    0.046   63.757    0.000
   .bf05_10_1         4.107    0.032  128.627    0.000
   .bf05_15_1         3.642    0.036  101.863    0.000
   .bf05_20_1         3.862    0.040   95.629    0.000
   .bf05_25_1         2.363    0.043   54.499    0.000
   .bf05_30_1         2.473    0.042   58.767    0.000
   .bf05_35_1         3.999    0.036  109.961    0.000
   .bf05_40_1         3.968    0.035  113.040    0.000
   .bf05_45_1         2.099    0.040   52.442    0.000
   .bf05_50_1         2.399    0.046   51.800    0.000
   .bf05_55_1         2.435    0.042   57.439    0.000
   .bf05_60_1         3.539    0.037   96.935    0.000
    opnn_crr1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_05_t1        1.703    0.084   20.359    0.000
   .bf05_10_t1        0.658    0.034   19.091    0.000
   .bf05_15_t1        0.817    0.044   18.616    0.000
   .bf05_20_t1        0.811    0.050   16.084    0.000
   .bf05_25_t1        1.276    0.066   19.321    0.000
   .bf05_30_t1        1.114    0.059   18.722    0.000
   .bf05_35_t1        0.647    0.041   15.919    0.000
   .bf05_40_t1        0.747    0.040   18.676    0.000
   .bf05_45_t1        1.041    0.055   19.015    0.000
   .bf05_50_t1        1.326    0.072   18.546    0.000
   .bf05_55_t1        1.134    0.060   18.955    0.000
   .bf05_60_t1        0.773    0.043   17.908    0.000
    openn_curr1       1.000                           
tidy(fit_cfa_openn_curr) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                      op    label    estimate std.error std.all
   <chr>                     <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 openn_curr1 =~ bf05_20_t1 =~    lambda4    -0.756    0.0416  -0.643
 2 openn_curr1 =~ bf05_50_t1 =~    lambda10    0.700    0.0484   0.520
 3 openn_curr1 =~ bf05_35_t1 =~    lambda7    -0.688    0.0373  -0.650
 4 openn_curr1 =~ bf05_55_t1 =~    lambda11    0.623    0.0438   0.505
 5 openn_curr1 =~ bf05_30_t1 =~    lambda6     0.622    0.0440   0.508
 6 openn_curr1 =~ bf05_60_t1 =~    lambda12   -0.597    0.0379  -0.562
 7 openn_curr1 =~ bf05_25_t1 =~    lambda5     0.565    0.0458   0.447
 8 openn_curr1 =~ bf05_45_t1 =~    lambda9     0.562    0.0420   0.483
 9 openn_curr1 =~ bf05_40_t1 =~    lambda8    -0.546    0.0360  -0.534
10 openn_curr1 =~ bf05_15_t1 =~    lambda3    -0.517    0.0381  -0.496
11 openn_curr1 =~ bf05_10_t1 =~    lambda2    -0.455    0.0332  -0.489
12 openn_curr1 =~ bf05_05_t1 =~    lambda1     0.291    0.0502   0.217

Reverse-code and form parcels:

df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% 
  mutate(bf05_50_t1_r = bf05_50_t1,
         bf05_55_t1_r = bf05_55_t1,
         bf05_30_t1_r = bf05_30_t1,
         bf05_25_t1_r = bf05_25_t1,
         bf05_45_t1_r = bf05_45_t1,
         bf05_05_t1_r = bf05_05_t1,
         bf05_50_t2_r = bf05_50_t2,
         bf05_55_t2_r = bf05_55_t2,
         bf05_30_t2_r = bf05_30_t2,
         bf05_25_t2_r = bf05_25_t2,
         bf05_45_t2_r = bf05_45_t2,
         bf05_05_t2_r = bf05_05_t2,
         bf05_50_t3_r = bf05_50_t3,
         bf05_55_t3_r = bf05_55_t3,
         bf05_30_t3_r = bf05_30_t3,
         bf05_25_t3_r = bf05_25_t3,
         bf05_45_t3_r = bf05_45_t3,
         bf05_05_t3_r = bf05_05_t3) %>% 
  mutate(across(c(bf05_50_t1_r, bf05_55_t1_r, bf05_30_t1_r, bf05_25_t1_r, bf05_45_t1_r, bf05_05_t1_r,
                  bf05_50_t2_r, bf05_55_t2_r, bf05_30_t2_r, bf05_25_t2_r, bf05_45_t2_r, bf05_05_t2_r,
                  bf05_50_t3_r, bf05_55_t3_r, bf05_30_t3_r, bf05_25_t3_r, bf05_45_t3_r, bf05_05_t3_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(openn_curr_par1_t1 = rowMeans(across(c(bf05_20_t1, bf05_60_t1, bf05_25_t1_r, bf05_05_t1_r)), na.rm=T),
         openn_curr_par2_t1 = rowMeans(across(c(bf05_50_t1_r, bf05_30_t1_r, bf05_45_t1_r, bf05_10_t1)), na.rm=T),
         openn_curr_par3_t1 = rowMeans(across(c(bf05_35_t1, bf05_55_t1_r, bf05_40_t1, bf05_15_t1)), na.rm=T),
         openn_curr_par1_t2 = rowMeans(across(c(bf05_20_t2, bf05_60_t2, bf05_25_t2_r, bf05_05_t2_r)), na.rm=T),
         openn_curr_par2_t2 = rowMeans(across(c(bf05_50_t2_r, bf05_30_t2_r, bf05_45_t2_r, bf05_10_t2)), na.rm=T),
         openn_curr_par3_t2 = rowMeans(across(c(bf05_35_t2, bf05_55_t2_r, bf05_40_t2, bf05_15_t2)), na.rm=T),
         openn_curr_par1_t3 = rowMeans(across(c(bf05_20_t3, bf05_60_t3, bf05_25_t3_r, bf05_05_t3_r)), na.rm=T),
         openn_curr_par2_t3 = rowMeans(across(c(bf05_50_t3_r, bf05_30_t3_r, bf05_45_t3_r, bf05_10_t3)), na.rm=T),
         openn_curr_par3_t3 = rowMeans(across(c(bf05_35_t3, bf05_55_t3_r, bf05_40_t3, bf05_15_t3)), na.rm=T))

3.2.10 Openness - ideal personality

Check CFA item loadings at T1

cfa_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*bf06_05_t1 + lambda1*bf06_05_t1 + lambda2*bf06_10_t1 + lambda3*bf06_15_t1 + lambda4*bf06_20_t1 + lambda5*bf06_25_t1 + lambda6*bf06_30_t1 + lambda7*bf06_35_t1 + lambda8*bf06_40_t1 + lambda9*bf06_45_t1 + lambda10*bf06_50_t1 + lambda11*bf06_55_t1 + lambda12*bf06_60_t1

# Intercepts
bf06_05_t1 ~ i1*1
bf06_10_t1 ~ 1
bf06_15_t1 ~ 1
bf06_20_t1 ~ 1
bf06_25_t1 ~ 1
bf06_30_t1 ~ 1
bf06_35_t1 ~ 1
bf06_40_t1 ~ 1
bf06_45_t1 ~ 1
bf06_50_t1 ~ 1
bf06_55_t1 ~ 1
bf06_60_t1 ~ 1

# Unique Variances
bf06_05_t1 ~~ bf06_05_t1
bf06_10_t1 ~~ bf06_10_t1
bf06_15_t1 ~~ bf06_15_t1
bf06_20_t1 ~~ bf06_20_t1
bf06_25_t1 ~~ bf06_25_t1
bf06_30_t1 ~~ bf06_30_t1
bf06_35_t1 ~~ bf06_35_t1
bf06_40_t1 ~~ bf06_40_t1
bf06_45_t1 ~~ bf06_45_t1
bf06_50_t1 ~~ bf06_50_t1
bf06_55_t1 ~~ bf06_55_t1
bf06_60_t1 ~~ bf06_60_t1

# Latent Variable Means
openn_ideal1 ~ 0*1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
'
fit_cfa_openn_ideal <- cfa(cfa_openn_ideal, data = df_sbsa2_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_openn_ideal, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 43 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           847         849
  Number of missing patterns                         5            

Model Test User Model:
                                                      
  Test statistic                               460.240
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              2053.128
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.796
  Tucker-Lewis Index (TLI)                       0.750
                                                      
  Robust Comparative Fit Index (CFI)             0.796
  Robust Tucker-Lewis Index (TLI)                0.751

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -13794.655
  Loglikelihood unrestricted model (H1)     -13564.536
                                                      
  Akaike (AIC)                               27661.311
  Bayesian (BIC)                             27832.012
  Sample-size adjusted Bayesian (SABIC)      27717.687

Root Mean Square Error of Approximation:

  RMSEA                                          0.094
  90 Percent confidence interval - lower         0.086
  90 Percent confidence interval - upper         0.102
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    0.998
                                                      
  Robust RMSEA                                   0.095
  90 Percent confidence interval - lower         0.087
  90 Percent confidence interval - upper         0.103
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             0.999

Standardized Root Mean Square Residual:

  SRMR                                           0.062

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  openn_ideal1 =~                                     
    b06_05_ (lmb1)    0.255    0.057    4.476    0.000
    b06_10_ (lmb2)   -0.418    0.027  -15.710    0.000
    b06_15_ (lmb3)   -0.383    0.025  -15.319    0.000
    b06_20_ (lmb4)   -0.548    0.033  -16.798    0.000
    b06_25_ (lmb5)    0.537    0.039   13.632    0.000
    b06_30_ (lmb6)    0.559    0.052   10.808    0.000
    b06_35_ (lmb7)   -0.545    0.034  -16.236    0.000
    b06_40_ (lmb8)   -0.511    0.042  -12.236    0.000
    b06_45_ (lmb9)    0.525    0.038   13.904    0.000
    b06_50_ (lm10)    0.590    0.041   14.308    0.000
    b06_55_ (lm11)    0.554    0.045   12.323    0.000
    b06_60_ (lm12)   -0.456    0.027  -17.166    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_05_1 (i1)    3.020    0.051   59.265    0.000
   .bf06_10_1         4.492    0.026  173.867    0.000
   .bf06_15_1         4.595    0.024  191.631    0.000
   .bf06_20_1         4.331    0.032  137.244    0.000
   .bf06_25_1         1.823    0.037   48.684    0.000
   .bf06_30_1         2.012    0.048   42.001    0.000
   .bf06_35_1         4.296    0.032  133.053    0.000
   .bf06_40_1         3.899    0.039   99.042    0.000
   .bf06_45_1         1.639    0.036   45.721    0.000
   .bf06_50_1         1.996    0.039   50.743    0.000
   .bf06_55_1         2.159    0.042   51.370    0.000
   .bf06_60_1         4.528    0.026  174.121    0.000
    openn_dl1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_05_t1        2.129    0.104   20.396    0.000
   .bf06_10_t1        0.389    0.021   18.294    0.000
   .bf06_15_t1        0.340    0.019   18.225    0.000
   .bf06_20_t1        0.541    0.031   17.325    0.000
   .bf06_25_t1        0.897    0.047   18.909    0.000
   .bf06_30_t1        1.630    0.083   19.553    0.000
   .bf06_35_t1        0.583    0.033   17.571    0.000
   .bf06_40_t1        1.049    0.054   19.317    0.000
   .bf06_45_t1        0.812    0.043   18.754    0.000
   .bf06_50_t1        0.961    0.052   18.632    0.000
   .bf06_55_t1        1.188    0.062   19.162    0.000
   .bf06_60_t1        0.365    0.021   17.350    0.000
    openn_ideal1      1.000                           
tidy(fit_cfa_openn_ideal) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                       op    label    estimate std.error std.all
   <chr>                      <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 openn_ideal1 =~ bf06_50_t1 =~    lambda10    0.590    0.0412   0.516
 2 openn_ideal1 =~ bf06_30_t1 =~    lambda6     0.559    0.0517   0.401
 3 openn_ideal1 =~ bf06_55_t1 =~    lambda11    0.554    0.0449   0.453
 4 openn_ideal1 =~ bf06_20_t1 =~    lambda4    -0.548    0.0326  -0.598
 5 openn_ideal1 =~ bf06_35_t1 =~    lambda7    -0.545    0.0336  -0.581
 6 openn_ideal1 =~ bf06_25_t1 =~    lambda5     0.537    0.0394   0.493
 7 openn_ideal1 =~ bf06_45_t1 =~    lambda9     0.525    0.0377   0.503
 8 openn_ideal1 =~ bf06_40_t1 =~    lambda8    -0.511    0.0418  -0.447
 9 openn_ideal1 =~ bf06_60_t1 =~    lambda12   -0.456    0.0266  -0.603
10 openn_ideal1 =~ bf06_10_t1 =~    lambda2    -0.418    0.0266  -0.556
11 openn_ideal1 =~ bf06_15_t1 =~    lambda3    -0.383    0.0250  -0.549
12 openn_ideal1 =~ bf06_05_t1 =~    lambda1     0.255    0.0569   0.172

Reverse-code and form parcels:

df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% 
  mutate(bf06_50_t1_r = bf06_50_t1,
         bf06_55_t1_r = bf06_55_t1,
         bf06_30_t1_r = bf06_30_t1,
         bf06_25_t1_r = bf06_25_t1,
         bf06_45_t1_r = bf06_45_t1,
         bf06_05_t1_r = bf06_05_t1,
         bf06_50_t2_r = bf06_50_t2,
         bf06_55_t2_r = bf06_55_t2,
         bf06_30_t2_r = bf06_30_t2,
         bf06_25_t2_r = bf06_25_t2,
         bf06_45_t2_r = bf06_45_t2,
         bf06_05_t2_r = bf06_05_t2,
         bf06_50_t3_r = bf06_50_t3,
         bf06_55_t3_r = bf06_55_t3,
         bf06_30_t3_r = bf06_30_t3,
         bf06_25_t3_r = bf06_25_t3,
         bf06_45_t3_r = bf06_45_t3,
         bf06_05_t3_r = bf06_05_t3) %>% 
  mutate(across(c(bf06_50_t1_r, bf06_55_t1_r, bf06_30_t1_r, bf06_25_t1_r, bf06_45_t1_r, bf06_05_t1_r,
                  bf06_50_t2_r, bf06_55_t2_r, bf06_30_t2_r, bf06_25_t2_r, bf06_45_t2_r, bf06_05_t2_r,
                  bf06_50_t3_r, bf06_55_t3_r, bf06_30_t3_r, bf06_25_t3_r, bf06_45_t3_r, bf06_05_t3_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(openn_ideal_par1_t1 = rowMeans(across(c(bf06_50_t1_r, bf06_25_t1_r, bf06_60_t1, bf06_05_t1)), na.rm=T),
         openn_ideal_par2_t1 = rowMeans(across(c(bf06_30_t1_r, bf06_35_t1, bf06_40_t1, bf06_15_t1)), na.rm=T),
         openn_ideal_par3_t1 = rowMeans(across(c(bf06_55_t1_r, bf06_20_t1, bf06_45_t1_r, bf06_10_t1)), na.rm=T),
         openn_ideal_par1_t2 = rowMeans(across(c(bf06_50_t2_r, bf06_25_t2_r, bf06_60_t2, bf06_05_t2)), na.rm=T),
         openn_ideal_par2_t2 = rowMeans(across(c(bf06_30_t2_r, bf06_35_t2, bf06_40_t2, bf06_15_t2)), na.rm=T),
         openn_ideal_par3_t2 = rowMeans(across(c(bf06_55_t2_r, bf06_20_t2, bf06_45_t2_r, bf06_10_t2)), na.rm=T),
         openn_ideal_par1_t3 = rowMeans(across(c(bf06_50_t3_r, bf06_25_t3_r, bf06_60_t3, bf06_05_t3)), na.rm=T),
         openn_ideal_par2_t3 = rowMeans(across(c(bf06_30_t3_r, bf06_35_t3, bf06_40_t3, bf06_15_t3)), na.rm=T),
         openn_ideal_par3_t3 = rowMeans(across(c(bf06_55_t3_r, bf06_20_t3, bf06_45_t3_r, bf06_10_t3)), na.rm=T))

# replace NaN with regular NA
df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% 
    mutate_all(~ifelse(is.nan(.), NA, .))

3.3 Recode all reverse-keyed items

This is only relevant for the facet-level models. All trait-level models rely on the parcels created above. However, the facet-level models pick the first item as the anchor indicator which is sometimes reverse-keyed for the latent factor. For analyses below I want to use just positively keyed variables (for neuroticism facets higher values should indicate higher neuroticism).

# save all relevant variable names
names_rev_scored <- df_sbsa2_wide_pers %>% select(ends_with("_r")) %>% colnames()
names_rev_scored_orig <- gsub("_r", "", names_rev_scored) # variable names without the "_r" -> these are the original variables

# drop original variables
df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% select(-all_of(names_rev_scored_orig))
# recreate original variable names -> these are the recoded variables now!
df_sbsa2_wide_pers <- df_sbsa2_wide_pers %>% rename_with(~ gsub("_r", "", .x))

4 Measurement invariance

4.1 Well-being outcomes

Testing for measurement invariance of the latent traits across time. Only doing this for the two (original) intervention groups for now, not for the waitlist control group, because they had different intervention schedules and our main focus lies on testing changes in the intervention groups.

4.1.1 Life satisfaction

Satisfaction with life scale (only the first four items - last one taps into a somewhat different construct)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_swls <- '
# Define the latent factors
swls1 =~ NA*sw06_01_t1 + lambda1*sw06_01_t1 + sw06_02_t1 + sw06_03_t1 + sw06_04_t1
swls2 =~ NA*sw06_01_t2 + lambda1*sw06_01_t2 + sw06_02_t2 + sw06_03_t2 + sw06_04_t2
swls3 =~ NA*sw06_01_t3 + lambda1*sw06_01_t3 + sw06_02_t3 + sw06_03_t3 + sw06_04_t3

# Intercepts
sw06_01_t1 ~ i1*1
sw06_02_t1 ~ 1
sw06_03_t1 ~ 1
sw06_04_t1 ~ 1

sw06_01_t2 ~ i1*1
sw06_02_t2 ~ 1
sw06_03_t2 ~ 1
sw06_04_t2 ~ 1

sw06_01_t3 ~ i1*1
sw06_02_t3 ~ 1
sw06_03_t3 ~ 1
sw06_04_t3 ~ 1

# Unique Variances
sw06_01_t1 ~~ sw06_01_t1
sw06_02_t1 ~~ sw06_02_t1
sw06_03_t1 ~~ sw06_03_t1
sw06_04_t1 ~~ sw06_04_t1

sw06_01_t2 ~~ sw06_01_t2
sw06_02_t2 ~~ sw06_02_t2
sw06_03_t2 ~~ sw06_03_t2
sw06_04_t2 ~~ sw06_04_t2

sw06_01_t3 ~~ sw06_01_t3
sw06_02_t3 ~~ sw06_02_t3
sw06_03_t3 ~~ sw06_03_t3
sw06_04_t3 ~~ sw06_04_t3

# Latent Variable Means
swls1 ~ 0*1
swls2 ~ 1
swls3 ~ 1

# Latent Variable Variances and Covariance
swls1 ~~ 1*swls1
swls2 ~~ swls2
swls3 ~~ swls3
swls1 ~~ swls2
swls1 ~~ swls3
swls2 ~~ swls3
'
fit_configural_swls <- cfa(configural_swls, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_configural_swls, fit.measures = TRUE)

# Weak invariance model
weak_swls <- '
# Define the latent factors
swls1 =~ NA*sw06_01_t1 + lambda1*sw06_01_t1 + lambda2*sw06_02_t1 + lambda3*sw06_03_t1 + lambda4*sw06_04_t1
swls2 =~ NA*sw06_01_t2 + lambda1*sw06_01_t2 + lambda2*sw06_02_t2 + lambda3*sw06_03_t2 + lambda4*sw06_04_t2
swls3 =~ NA*sw06_01_t3 + lambda1*sw06_01_t3 + lambda2*sw06_02_t3 + lambda3*sw06_03_t3 + lambda4*sw06_04_t3

# Intercepts
sw06_01_t1 ~ i1*1
sw06_02_t1 ~ 1
sw06_03_t1 ~ 1
sw06_04_t1 ~ 1

sw06_01_t2 ~ i1*1
sw06_02_t2 ~ 1
sw06_03_t2 ~ 1
sw06_04_t2 ~ 1

sw06_01_t3 ~ i1*1
sw06_02_t3 ~ 1
sw06_03_t3 ~ 1
sw06_04_t3 ~ 1

# Unique Variances
sw06_01_t1 ~~ sw06_01_t1
sw06_02_t1 ~~ sw06_02_t1
sw06_03_t1 ~~ sw06_03_t1
sw06_04_t1 ~~ sw06_04_t1

sw06_01_t2 ~~ sw06_01_t2
sw06_02_t2 ~~ sw06_02_t2
sw06_03_t2 ~~ sw06_03_t2
sw06_04_t2 ~~ sw06_04_t2

sw06_01_t3 ~~ sw06_01_t3
sw06_02_t3 ~~ sw06_02_t3
sw06_03_t3 ~~ sw06_03_t3
sw06_04_t3 ~~ sw06_04_t3

# Latent Variable Means
swls1 ~ 0*1
swls2 ~ 1
swls3 ~ 1

# Latent Variable Variances and Covariance
swls1 ~~ 1*swls1
swls2 ~~ swls2
swls3 ~~ swls3
swls1 ~~ swls2
swls1 ~~ swls3
swls2 ~~ swls3
'
fit_weak_swls <- cfa(weak_swls, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_weak_swls, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_swls <- '
# Define the latent factors
swls1 =~ NA*sw06_01_t1 + lambda1*sw06_01_t1 + lambda2*sw06_02_t1 + lambda3*sw06_03_t1 + lambda4*sw06_04_t1
swls2 =~ NA*sw06_01_t2 + lambda1*sw06_01_t2 + lambda2*sw06_02_t2 + lambda3*sw06_03_t2 + lambda4*sw06_04_t2
swls3 =~ NA*sw06_01_t3 + lambda1*sw06_01_t3 + lambda2*sw06_02_t3 + lambda3*sw06_03_t3 + lambda4*sw06_04_t3

# Intercepts
sw06_01_t1 ~ i1*1
sw06_02_t1 ~ i2*1
sw06_03_t1 ~ i3*1
sw06_04_t1 ~ i4*1

sw06_01_t2 ~ i1*1
sw06_02_t2 ~ i2*1
sw06_03_t2 ~ i3*1
sw06_04_t2 ~ i4*1

sw06_01_t3 ~ i1*1
sw06_02_t3 ~ i2*1
sw06_03_t3 ~ i3*1
sw06_04_t3 ~ i4*1

# Unique Variances
sw06_01_t1 ~~ sw06_01_t1
sw06_02_t1 ~~ sw06_02_t1
sw06_03_t1 ~~ sw06_03_t1
sw06_04_t1 ~~ sw06_04_t1

sw06_01_t2 ~~ sw06_01_t2
sw06_02_t2 ~~ sw06_02_t2
sw06_03_t2 ~~ sw06_03_t2
sw06_04_t2 ~~ sw06_04_t2

sw06_01_t3 ~~ sw06_01_t3
sw06_02_t3 ~~ sw06_02_t3
sw06_03_t3 ~~ sw06_03_t3
sw06_04_t3 ~~ sw06_04_t3

# Latent Variable Means
swls1 ~ 0*1
swls2 ~ 1
swls3 ~ 1

# Latent Variable Variances and Covariance
swls1 ~~ 1*swls1
swls2 ~~ swls2
swls3 ~~ swls3
swls1 ~~ swls2
swls1 ~~ swls3
swls2 ~~ swls3
'
fit_strong_swls <- cfa(strong_swls, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strong_swls, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_swls <- '
# Define the latent factors
swls1 =~ NA*sw06_01_t1 + lambda1*sw06_01_t1 + lambda2*sw06_02_t1 + lambda3*sw06_03_t1 + lambda4*sw06_04_t1
swls2 =~ NA*sw06_01_t2 + lambda1*sw06_01_t2 + lambda2*sw06_02_t2 + lambda3*sw06_03_t2 + lambda4*sw06_04_t2
swls3 =~ NA*sw06_01_t3 + lambda1*sw06_01_t3 + lambda2*sw06_02_t3 + lambda3*sw06_03_t3 + lambda4*sw06_04_t3

# Intercepts
sw06_01_t1 ~ i1*1
sw06_02_t1 ~ i2*1
sw06_03_t1 ~ i3*1
sw06_04_t1 ~ i4*1

sw06_01_t2 ~ i1*1
sw06_02_t2 ~ i2*1
sw06_03_t2 ~ i3*1
sw06_04_t2 ~ i4*1

sw06_01_t3 ~ i1*1
sw06_02_t3 ~ i2*1
sw06_03_t3 ~ i3*1
sw06_04_t3 ~ i4*1

# Unique Variances
sw06_01_t1 ~~ u1*sw06_01_t1
sw06_02_t1 ~~ u2*sw06_02_t1
sw06_03_t1 ~~ u3*sw06_03_t1
sw06_04_t1 ~~ u4*sw06_04_t1

sw06_01_t2 ~~ u1*sw06_01_t2
sw06_02_t2 ~~ u2*sw06_02_t2
sw06_03_t2 ~~ u3*sw06_03_t2
sw06_04_t2 ~~ u4*sw06_04_t2

sw06_01_t3 ~~ u1*sw06_01_t3
sw06_02_t3 ~~ u2*sw06_02_t3
sw06_03_t3 ~~ u3*sw06_03_t3
sw06_04_t3 ~~ u4*sw06_04_t3

# Latent Variable Means
swls1 ~ 0*1
swls2 ~ 1
swls3 ~ 1

# Latent Variable Variances and Covariance
swls1 ~~ 1*swls1
swls2 ~~ swls2
swls3 ~~ swls3
swls1 ~~ swls2
swls2 ~~ swls3
swls1 ~~ swls3
'
fit_strict_swls <- cfa(strict_swls, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strict_swls, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_swls) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_swls) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_swls) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_swls) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq    AIC    BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl>  <dbl>  <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   848    39  678. 22384. 22569. 0.907 0.880 0.120 0.0468
2 weak         848    33  678. 22372. 22529. 0.908 0.893 0.113 0.0472
3 strong       848    27  688. 22370. 22498. 0.907 0.903 0.108 0.0485
4 strict       848    19  744. 22410. 22500. 0.900 0.907 0.106 0.0543
# chi-square difference test for nested models 
anova(fit_configural_swls, fit_weak_swls)

Chi-Squared Difference Test

                    Df   AIC   BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_configural_swls 51 22384 22568 677.81                                    
fit_weak_swls       57 22372 22529 678.41    0.59442     0       6     0.9965
anova(fit_weak_swls, fit_strong_swls)

Chi-Squared Difference Test

                Df   AIC   BIC  Chisq Chisq diff    RMSEA Df diff Pr(>Chisq)
fit_weak_swls   57 22372 22529 678.41                                       
fit_strong_swls 63 22370 22498 687.90     9.4974 0.026218       6     0.1475
anova(fit_strong_swls, fit_strict_swls)

Chi-Squared Difference Test

                Df   AIC   BIC  Chisq Chisq diff    RMSEA Df diff Pr(>Chisq)
fit_strong_swls 63 22370 22498 687.90                                       
fit_strict_swls 71 22410 22500 743.84     55.932 0.084056       8  2.908e-09
                   
fit_strong_swls    
fit_strict_swls ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Model fit relatively similar across model specifications. Chi^2 tests indicate that strong measurement invariance is given.

4.1.2 Meaning in life

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_meaning <- '
# Define the latent factors
meaning1 =~ NA*meaning_par1_t1 + lambda1*meaning_par1_t1 + meaning_par2_t1 + meaning_par3_t1
meaning2 =~ NA*meaning_par1_t2 + lambda1*meaning_par1_t2 + meaning_par2_t2 + meaning_par3_t2
meaning3 =~ NA*meaning_par1_t3 + lambda1*meaning_par1_t3 + meaning_par2_t3 + meaning_par3_t3

# Intercepts
meaning_par1_t1 ~ i1*1
meaning_par2_t1 ~ 1
meaning_par3_t1 ~ 1

meaning_par1_t2 ~ i1*1
meaning_par2_t2 ~ 1
meaning_par3_t2 ~ 1

meaning_par1_t3 ~ i1*1
meaning_par2_t3 ~ 1
meaning_par3_t3 ~ 1

# Unique Variances
meaning_par1_t1 ~~ meaning_par1_t1
meaning_par2_t1 ~~ meaning_par2_t1
meaning_par3_t1 ~~ meaning_par3_t1

meaning_par1_t2 ~~ meaning_par1_t2
meaning_par2_t2 ~~ meaning_par2_t2
meaning_par3_t2 ~~ meaning_par3_t2

meaning_par1_t3 ~~ meaning_par1_t3
meaning_par2_t3 ~~ meaning_par2_t3
meaning_par3_t3 ~~ meaning_par3_t3

# Latent Variable Means
meaning1 ~ 0*1
meaning2 ~ 1
meaning3 ~ 1

# Latent Variable Variances and Covariance
meaning1 ~~ 1*meaning1
meaning2 ~~ meaning2
meaning3 ~~ meaning3
meaning1 ~~ meaning2
meaning2 ~~ meaning3
meaning1 ~~ meaning3
'
fit_configural_meaning <- cfa(configural_meaning, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_configural_meaning, fit.measures = TRUE)

# Weak invariance model
weak_meaning <- '
# Define the latent factors
meaning1 =~ NA*meaning_par1_t1 + lambda1*meaning_par1_t1 + lambda2*meaning_par2_t1 + lambda3*meaning_par3_t1
meaning2 =~ NA*meaning_par1_t2 + lambda1*meaning_par1_t2 + lambda2*meaning_par2_t2 + lambda3*meaning_par3_t2
meaning3 =~ NA*meaning_par1_t3 + lambda1*meaning_par1_t3 + lambda2*meaning_par2_t3 + lambda3*meaning_par3_t3

# Intercepts
meaning_par1_t1 ~ i1*1
meaning_par2_t1 ~ 1
meaning_par3_t1 ~ 1

meaning_par1_t2 ~ i1*1
meaning_par2_t2 ~ 1
meaning_par3_t2 ~ 1

meaning_par1_t3 ~ i1*1
meaning_par2_t3 ~ 1
meaning_par3_t3 ~ 1

# Unique Variances
meaning_par1_t1 ~~ meaning_par1_t1
meaning_par2_t1 ~~ meaning_par2_t1
meaning_par3_t1 ~~ meaning_par3_t1

meaning_par1_t2 ~~ meaning_par1_t2
meaning_par2_t2 ~~ meaning_par2_t2
meaning_par3_t2 ~~ meaning_par3_t2

meaning_par1_t3 ~~ meaning_par1_t3
meaning_par2_t3 ~~ meaning_par2_t3
meaning_par3_t3 ~~ meaning_par3_t3

# Latent Variable Means
meaning1 ~ 0*1
meaning2 ~ 1
meaning3 ~ 1

# Latent Variable Variances and Covariance
meaning1 ~~ 1*meaning1
meaning2 ~~ meaning2
meaning3 ~~ meaning3
meaning1 ~~ meaning2
meaning2 ~~ meaning3
meaning1 ~~ meaning3
'
fit_weak_meaning <- cfa(weak_meaning, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_weak_meaning, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_meaning <- '
# Define the latent factors
meaning1 =~ NA*meaning_par1_t1 + lambda1*meaning_par1_t1 + lambda2*meaning_par2_t1 + lambda3*meaning_par3_t1
meaning2 =~ NA*meaning_par1_t2 + lambda1*meaning_par1_t2 + lambda2*meaning_par2_t2 + lambda3*meaning_par3_t2
meaning3 =~ NA*meaning_par1_t3 + lambda1*meaning_par1_t3 + lambda2*meaning_par2_t3 + lambda3*meaning_par3_t3

# Intercepts
meaning_par1_t1 ~ i1*1
meaning_par2_t1 ~ i2*1
meaning_par3_t1 ~ i3*1

meaning_par1_t2 ~ i1*1
meaning_par2_t2 ~ i2*1
meaning_par3_t2 ~ i3*1

meaning_par1_t3 ~ i1*1
meaning_par2_t3 ~ i2*1
meaning_par3_t3 ~ i3*1

# Unique Variances
meaning_par1_t1 ~~ meaning_par1_t1
meaning_par2_t1 ~~ meaning_par2_t1
meaning_par3_t1 ~~ meaning_par3_t1

meaning_par1_t2 ~~ meaning_par1_t2
meaning_par2_t2 ~~ meaning_par2_t2
meaning_par3_t2 ~~ meaning_par3_t2

meaning_par1_t3 ~~ meaning_par1_t3
meaning_par2_t3 ~~ meaning_par2_t3
meaning_par3_t3 ~~ meaning_par3_t3

# Latent Variable Means
meaning1 ~ 0*1
meaning2 ~ 1
meaning3 ~ 1

# Latent Variable Variances and Covariance
meaning1 ~~ 1*meaning1
meaning2 ~~ meaning2
meaning3 ~~ meaning3
meaning1 ~~ meaning2
meaning1 ~~ meaning3
meaning2 ~~ meaning3
'
fit_strong_meaning <- cfa(strong_meaning, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strong_meaning, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_meaning <- '
# Define the latent factors
meaning1 =~ NA*meaning_par1_t1 + lambda1*meaning_par1_t1 + lambda2*meaning_par2_t1 + lambda3*meaning_par3_t1
meaning2 =~ NA*meaning_par1_t2 + lambda1*meaning_par1_t2 + lambda2*meaning_par2_t2 + lambda3*meaning_par3_t2
meaning3 =~ NA*meaning_par1_t3 + lambda1*meaning_par1_t3 + lambda2*meaning_par2_t3 + lambda3*meaning_par3_t3

# Intercepts
meaning_par1_t1 ~ i1*1
meaning_par2_t1 ~ i2*1
meaning_par3_t1 ~ i3*1

meaning_par1_t2 ~ i1*1
meaning_par2_t2 ~ i2*1
meaning_par3_t2 ~ i3*1

meaning_par1_t3 ~ i1*1
meaning_par2_t3 ~ i2*1
meaning_par3_t3 ~ i3*1

# Unique Variances
meaning_par1_t1 ~~ u1*meaning_par1_t1
meaning_par2_t1 ~~ u2*meaning_par2_t1
meaning_par3_t1 ~~ u3*meaning_par3_t1

meaning_par1_t2 ~~ u1*meaning_par1_t2
meaning_par2_t2 ~~ u2*meaning_par2_t2
meaning_par3_t2 ~~ u3*meaning_par3_t2

meaning_par1_t3 ~~ u1*meaning_par1_t3
meaning_par2_t3 ~~ u2*meaning_par2_t3
meaning_par3_t3 ~~ u3*meaning_par3_t3

# Latent Variable Means
meaning1 ~ 0*1
meaning2 ~ 1
meaning3 ~ 1

# Latent Variable Variances and Covariance
meaning1 ~~ 1*meaning1
meaning2 ~~ meaning2
meaning3 ~~ meaning3
meaning1 ~~ meaning2
meaning1 ~~ meaning3
meaning2 ~~ meaning3
'
fit_strict_meaning <- cfa(strict_meaning, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strict_meaning, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_meaning) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_meaning) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_meaning) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_meaning) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq    AIC    BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl>  <dbl>  <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   848    30  561. 16778. 16920. 0.910 0.865 0.162 0.0390
2 weak         848    26  566. 16775. 16899. 0.910 0.884 0.151 0.0423
3 strong       848    22  568. 16769. 16874. 0.910 0.899 0.141 0.0420
4 strict       848    16  586. 16775. 16851. 0.908 0.913 0.130 0.0476
# chi-square difference test for nested models 
anova(fit_configural_meaning, fit_weak_meaning)

Chi-Squared Difference Test

                       Df   AIC   BIC  Chisq Chisq diff    RMSEA Df diff
fit_configural_meaning 24 16778 16920 561.41                            
fit_weak_meaning       28 16775 16898 566.50     5.0933 0.017954       4
                       Pr(>Chisq)
fit_configural_meaning           
fit_weak_meaning           0.2779
anova(fit_weak_meaning, fit_strong_meaning)

Chi-Squared Difference Test

                   Df   AIC   BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_weak_meaning   28 16775 16898 566.50                                    
fit_strong_meaning 32 16769 16874 568.49     1.9918     0       4     0.7373
anova(fit_strong_meaning, fit_strict_meaning)

Chi-Squared Difference Test

                   Df   AIC   BIC  Chisq Chisq diff    RMSEA Df diff Pr(>Chisq)
fit_strong_meaning 32 16769 16874 568.49                                       
fit_strict_meaning 38 16775 16851 586.21     17.716 0.047987       6   0.006982
                     
fit_strong_meaning   
fit_strict_meaning **
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Good model fit across all model specifications (except for RMSEA). Chi^2 tests indicate that strong measurement invariance is given.

4.1.3 Self-esteem

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_selfes <- '
# Define the latent factors
selfes1 =~ NA*selfes_par1_t1 + lambda1*selfes_par1_t1 + selfes_par2_t1 + selfes_par3_t1
selfes2 =~ NA*selfes_par1_t2 + lambda1*selfes_par1_t2 + selfes_par2_t2 + selfes_par3_t2
selfes3 =~ NA*selfes_par1_t3 + lambda1*selfes_par1_t3 + selfes_par2_t3 + selfes_par3_t3

# Intercepts
selfes_par1_t1 ~ i1*1
selfes_par2_t1 ~ 1
selfes_par3_t1 ~ 1

selfes_par1_t2 ~ i1*1
selfes_par2_t2 ~ 1
selfes_par3_t2 ~ 1

selfes_par1_t3 ~ i1*1
selfes_par2_t3 ~ 1
selfes_par3_t3 ~ 1

# Unique Variances
selfes_par1_t1 ~~ selfes_par1_t1
selfes_par2_t1 ~~ selfes_par2_t1
selfes_par3_t1 ~~ selfes_par3_t1

selfes_par1_t2 ~~ selfes_par1_t2
selfes_par2_t2 ~~ selfes_par2_t2
selfes_par3_t2 ~~ selfes_par3_t2

selfes_par1_t3 ~~ selfes_par1_t3
selfes_par2_t3 ~~ selfes_par2_t3
selfes_par3_t3 ~~ selfes_par3_t3

# Latent Variable Means
selfes1 ~ 0*1
selfes2 ~ 1
selfes3 ~ 1

# Latent Variable Variances and Covariance
selfes1 ~~ 1*selfes1
selfes2 ~~ selfes2
selfes3 ~~ selfes3
selfes1 ~~ selfes2
selfes1 ~~ selfes3
selfes2 ~~ selfes3
'
fit_configural_selfes <- cfa(configural_selfes, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_configural_selfes, fit.measures = TRUE)

# Weak invariance model
weak_selfes <- '
# Define the latent factors
selfes1 =~ NA*selfes_par1_t1 + lambda1*selfes_par1_t1 + lambda2*selfes_par2_t1 + lambda3*selfes_par3_t1
selfes2 =~ NA*selfes_par1_t2 + lambda1*selfes_par1_t2 + lambda2*selfes_par2_t2 + lambda3*selfes_par3_t2
selfes3 =~ NA*selfes_par1_t3 + lambda1*selfes_par1_t3 + lambda2*selfes_par2_t3 + lambda3*selfes_par3_t3

# Intercepts
selfes_par1_t1 ~ i1*1
selfes_par2_t1 ~ 1
selfes_par3_t1 ~ 1

selfes_par1_t2 ~ i1*1
selfes_par2_t2 ~ 1
selfes_par3_t2 ~ 1

selfes_par1_t3 ~ i1*1
selfes_par2_t3 ~ 1
selfes_par3_t3 ~ 1

# Unique Variances
selfes_par1_t1 ~~ selfes_par1_t1
selfes_par2_t1 ~~ selfes_par2_t1
selfes_par3_t1 ~~ selfes_par3_t1

selfes_par1_t2 ~~ selfes_par1_t2
selfes_par2_t2 ~~ selfes_par2_t2
selfes_par3_t2 ~~ selfes_par3_t2

selfes_par1_t3 ~~ selfes_par1_t3
selfes_par2_t3 ~~ selfes_par2_t3
selfes_par3_t3 ~~ selfes_par3_t3

# Latent Variable Means
selfes1 ~ 0*1
selfes2 ~ 1
selfes3 ~ 1

# Latent Variable Variances and Covariance
selfes1 ~~ 1*selfes1
selfes2 ~~ selfes2
selfes3 ~~ selfes3
selfes1 ~~ selfes2
selfes1 ~~ selfes3
selfes2 ~~ selfes3
'
fit_weak_selfes <- cfa(weak_selfes, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_weak_selfes, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_selfes <- '
# Define the latent factors
selfes1 =~ NA*selfes_par1_t1 + lambda1*selfes_par1_t1 + lambda2*selfes_par2_t1 + lambda3*selfes_par3_t1
selfes2 =~ NA*selfes_par1_t2 + lambda1*selfes_par1_t2 + lambda2*selfes_par2_t2 + lambda3*selfes_par3_t2
selfes3 =~ NA*selfes_par1_t3 + lambda1*selfes_par1_t3 + lambda2*selfes_par2_t3 + lambda3*selfes_par3_t3

# Intercepts
selfes_par1_t1 ~ i1*1
selfes_par2_t1 ~ i2*1
selfes_par3_t1 ~ i3*1

selfes_par1_t2 ~ i1*1
selfes_par2_t2 ~ i2*1
selfes_par3_t2 ~ i3*1

selfes_par1_t3 ~ i1*1
selfes_par2_t3 ~ i2*1
selfes_par3_t3 ~ i3*1

# Unique Variances
selfes_par1_t1 ~~ selfes_par1_t1
selfes_par2_t1 ~~ selfes_par2_t1
selfes_par3_t1 ~~ selfes_par3_t1

selfes_par1_t2 ~~ selfes_par1_t2
selfes_par2_t2 ~~ selfes_par2_t2
selfes_par3_t2 ~~ selfes_par3_t2

selfes_par1_t3 ~~ selfes_par1_t3
selfes_par2_t3 ~~ selfes_par2_t3
selfes_par3_t3 ~~ selfes_par3_t3

# Latent Variable Means
selfes1 ~ 0*1
selfes2 ~ 1
selfes3 ~ 1

# Latent Variable Variances and Covariance
selfes1 ~~ 1*selfes1
selfes2 ~~ selfes2
selfes3 ~~ selfes3
selfes1 ~~ selfes2
selfes1 ~~ selfes3
selfes2 ~~ selfes3
'
fit_strong_selfes <- cfa(strong_selfes, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strong_selfes, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_selfes <- '
# Define the latent factors
selfes1 =~ NA*selfes_par1_t1 + lambda1*selfes_par1_t1 + lambda2*selfes_par2_t1 + lambda3*selfes_par3_t1
selfes2 =~ NA*selfes_par1_t2 + lambda1*selfes_par1_t2 + lambda2*selfes_par2_t2 + lambda3*selfes_par3_t2
selfes3 =~ NA*selfes_par1_t3 + lambda1*selfes_par1_t3 + lambda2*selfes_par2_t3 + lambda3*selfes_par3_t3

# Intercepts
selfes_par1_t1 ~ i1*1
selfes_par2_t1 ~ i2*1
selfes_par3_t1 ~ i3*1

selfes_par1_t2 ~ i1*1
selfes_par2_t2 ~ i2*1
selfes_par3_t2 ~ i3*1

selfes_par1_t3 ~ i1*1
selfes_par2_t3 ~ i2*1
selfes_par3_t3 ~ i3*1

# Unique Variances
selfes_par1_t1 ~~ u1*selfes_par1_t1
selfes_par2_t1 ~~ u2*selfes_par2_t1
selfes_par3_t1 ~~ u3*selfes_par3_t1

selfes_par1_t2 ~~ u1*selfes_par1_t2
selfes_par2_t2 ~~ u2*selfes_par2_t2
selfes_par3_t2 ~~ u3*selfes_par3_t2

selfes_par1_t3 ~~ u1*selfes_par1_t3
selfes_par2_t3 ~~ u2*selfes_par2_t3
selfes_par3_t3 ~~ u3*selfes_par3_t3

# Latent Variable Means
selfes1 ~ 0*1
selfes2 ~ 1
selfes3 ~ 1

# Latent Variable Variances and Covariance
selfes1 ~~ 1*selfes1
selfes2 ~~ selfes2
selfes3 ~~ selfes3
selfes1 ~~ selfes2
selfes1 ~~ selfes3
selfes2 ~~ selfes3
'
fit_strict_selfes <- cfa(strict_selfes, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strict_selfes, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_selfes) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_selfes) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_selfes) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_selfes) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq    AIC    BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl>  <dbl>  <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   848    30  520. 12326. 12468. 0.924 0.886 0.156 0.0379
2 weak         848    26  523. 12320. 12443. 0.924 0.902 0.144 0.0407
3 strong       848    22  526. 12315. 12419. 0.924 0.915 0.135 0.0400
4 strict       848    16  532. 12310. 12385. 0.924 0.928 0.124 0.0427
# chi-square difference test for nested models 
anova(fit_configural_selfes, fit_weak_selfes)

Chi-Squared Difference Test

                      Df   AIC   BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_configural_selfes 24 12326 12468 520.25                                    
fit_weak_selfes       28 12320 12444 522.65     2.3939     0       4     0.6637
anova(fit_weak_selfes, fit_strong_selfes)

Chi-Squared Difference Test

                  Df   AIC   BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_weak_selfes   28 12320 12444 522.65                                    
fit_strong_selfes 32 12315 12419 525.54     2.8952     0       4     0.5755
anova(fit_strong_selfes, fit_strict_selfes)

Chi-Squared Difference Test

                  Df   AIC   BIC  Chisq Chisq diff    RMSEA Df diff Pr(>Chisq)
fit_strong_selfes 32 12315 12419 525.54                                       
fit_strict_selfes 38 12310 12386 532.10     6.5563 0.010456       6     0.3638

Good model fit across all model specifications (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.1.4 Self concept clarity

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_concept <- '
# Define the latent factors
concept1 =~ NA*concept_par1_t1 + lambda1*concept_par1_t1 + concept_par2_t1 + concept_par3_t1
concept2 =~ NA*concept_par1_t2 + lambda1*concept_par1_t2 + concept_par2_t2 + concept_par3_t2
concept3 =~ NA*concept_par1_t3 + lambda1*concept_par1_t3 + concept_par2_t3 + concept_par3_t3

# Intercepts
concept_par1_t1 ~ i1*1
concept_par2_t1 ~ 1
concept_par3_t1 ~ 1

concept_par1_t2 ~ i1*1
concept_par2_t2 ~ 1
concept_par3_t2 ~ 1

concept_par1_t3 ~ i1*1
concept_par2_t3 ~ 1
concept_par3_t3 ~ 1

# Unique Variances
concept_par1_t1 ~~ concept_par1_t1
concept_par2_t1 ~~ concept_par2_t1
concept_par3_t1 ~~ concept_par3_t1

concept_par1_t2 ~~ concept_par1_t2
concept_par2_t2 ~~ concept_par2_t2
concept_par3_t2 ~~ concept_par3_t2

concept_par1_t3 ~~ concept_par1_t3
concept_par2_t3 ~~ concept_par2_t3
concept_par3_t3 ~~ concept_par3_t3

# Latent Variable Means
concept1 ~ 0*1
concept2 ~ 1
concept3 ~ 1

# Latent Variable Variances and Covariance
concept1 ~~ 1*concept1
concept2 ~~ concept2
concept3 ~~ concept3
concept1 ~~ concept2
concept1 ~~ concept3
concept2 ~~ concept3
'
fit_configural_concept <- cfa(configural_concept, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_configural_concept, fit.measures = TRUE)

# Weak invariance model
weak_concept <- '
# Define the latent factors
concept1 =~ NA*concept_par1_t1 + lambda1*concept_par1_t1 + lambda2*concept_par2_t1 + lambda3*concept_par3_t1
concept2 =~ NA*concept_par1_t2 + lambda1*concept_par1_t2 + lambda2*concept_par2_t2 + lambda3*concept_par3_t2
concept3 =~ NA*concept_par1_t3 + lambda1*concept_par1_t3 + lambda2*concept_par2_t3 + lambda3*concept_par3_t3

# Intercepts
concept_par1_t1 ~ i1*1
concept_par2_t1 ~ 1
concept_par3_t1 ~ 1

concept_par1_t2 ~ i1*1
concept_par2_t2 ~ 1
concept_par3_t2 ~ 1

concept_par1_t3 ~ i1*1
concept_par2_t3 ~ 1
concept_par3_t3 ~ 1

# Unique Variances
concept_par1_t1 ~~ concept_par1_t1
concept_par2_t1 ~~ concept_par2_t1
concept_par3_t1 ~~ concept_par3_t1

concept_par1_t2 ~~ concept_par1_t2
concept_par2_t2 ~~ concept_par2_t2
concept_par3_t2 ~~ concept_par3_t2

concept_par1_t3 ~~ concept_par1_t3
concept_par2_t3 ~~ concept_par2_t3
concept_par3_t3 ~~ concept_par3_t3

# Latent Variable Means
concept1 ~ 0*1
concept2 ~ 1
concept3 ~ 1

# Latent Variable Variances and Covariance
concept1 ~~ 1*concept1
concept2 ~~ concept2
concept3 ~~ concept3
concept1 ~~ concept2
concept1 ~~ concept3
concept2 ~~ concept3
'
fit_weak_concept <- cfa(weak_concept, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_weak_concept, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_concept <- '
# Define the latent factors
concept1 =~ NA*concept_par1_t1 + lambda1*concept_par1_t1 + lambda2*concept_par2_t1 + lambda3*concept_par3_t1
concept2 =~ NA*concept_par1_t2 + lambda1*concept_par1_t2 + lambda2*concept_par2_t2 + lambda3*concept_par3_t2
concept3 =~ NA*concept_par1_t3 + lambda1*concept_par1_t3 + lambda2*concept_par2_t3 + lambda3*concept_par3_t3

# Intercepts
concept_par1_t1 ~ i1*1
concept_par2_t1 ~ i2*1
concept_par3_t1 ~ i3*1

concept_par1_t2 ~ i1*1
concept_par2_t2 ~ i2*1
concept_par3_t2 ~ i3*1

concept_par1_t3 ~ i1*1
concept_par2_t3 ~ i2*1
concept_par3_t3 ~ i3*1

# Unique Variances
concept_par1_t1 ~~ concept_par1_t1
concept_par2_t1 ~~ concept_par2_t1
concept_par3_t1 ~~ concept_par3_t1

concept_par1_t2 ~~ concept_par1_t2
concept_par2_t2 ~~ concept_par2_t2
concept_par3_t2 ~~ concept_par3_t2

concept_par1_t3 ~~ concept_par1_t3
concept_par2_t3 ~~ concept_par2_t3
concept_par3_t3 ~~ concept_par3_t3

# Latent Variable Means
concept1 ~ 0*1
concept2 ~ 1
concept3 ~ 1

# Latent Variable Variances and Covariance
concept1 ~~ 1*concept1
concept2 ~~ concept2
concept3 ~~ concept3
concept1 ~~ concept2
concept1 ~~ concept3
concept2 ~~ concept3
'
fit_strong_concept <- cfa(strong_concept, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strong_concept, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_concept <- '
# Define the latent factors
concept1 =~ NA*concept_par1_t1 + lambda1*concept_par1_t1 + lambda2*concept_par2_t1 + lambda3*concept_par3_t1
concept2 =~ NA*concept_par1_t2 + lambda1*concept_par1_t2 + lambda2*concept_par2_t2 + lambda3*concept_par3_t2
concept3 =~ NA*concept_par1_t3 + lambda1*concept_par1_t3 + lambda2*concept_par2_t3 + lambda3*concept_par3_t3

# Intercepts
concept_par1_t1 ~ i1*1
concept_par2_t1 ~ i2*1
concept_par3_t1 ~ i3*1

concept_par1_t2 ~ i1*1
concept_par2_t2 ~ i2*1
concept_par3_t2 ~ i3*1

concept_par1_t3 ~ i1*1
concept_par2_t3 ~ i2*1
concept_par3_t3 ~ i3*1

# Unique Variances
concept_par1_t1 ~~ u1*concept_par1_t1
concept_par2_t1 ~~ u2*concept_par2_t1
concept_par3_t1 ~~ u3*concept_par3_t1

concept_par1_t2 ~~ u1*concept_par1_t2
concept_par2_t2 ~~ u2*concept_par2_t2
concept_par3_t2 ~~ u3*concept_par3_t2

concept_par1_t3 ~~ u1*concept_par1_t3
concept_par2_t3 ~~ u2*concept_par2_t3
concept_par3_t3 ~~ u3*concept_par3_t3

# Latent Variable Means
concept1 ~ 0*1
concept2 ~ 1
concept3 ~ 1

# Latent Variable Variances and Covariance
concept1 ~~ 1*concept1
concept2 ~~ concept2
concept3 ~~ concept3
concept1 ~~ concept2
concept1 ~~ concept3
concept2 ~~ concept3
'
fit_strict_concept <- cfa(strict_concept, data = df_sbsa2_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strict_concept, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_concept) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_concept) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_concept) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_concept) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq    AIC    BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl>  <dbl>  <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   848    30  393. 12613. 12755. 0.940 0.910 0.135 0.0290
2 weak         848    26  399. 12611. 12734. 0.940 0.923 0.125 0.0346
3 strong       848    22  401. 12605. 12710. 0.940 0.933 0.117 0.0351
4 strict       848    16  414. 12606. 12682. 0.939 0.942 0.108 0.0336
# chi-square difference test for nested models 
anova(fit_configural_concept, fit_weak_concept)

Chi-Squared Difference Test

                       Df   AIC   BIC  Chisq Chisq diff    RMSEA Df diff
fit_configural_concept 24 12613 12755 392.65                            
fit_weak_concept       28 12611 12734 399.02     6.3783 0.026479       4
                       Pr(>Chisq)
fit_configural_concept           
fit_weak_concept           0.1726
anova(fit_weak_concept, fit_strong_concept)

Chi-Squared Difference Test

                   Df   AIC   BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_weak_concept   28 12611 12734 399.02                                    
fit_strong_concept 32 12605 12710 401.24     2.2189     0       4     0.6956
anova(fit_strong_concept, fit_strict_concept)

Chi-Squared Difference Test

                   Df   AIC   BIC  Chisq Chisq diff    RMSEA Df diff Pr(>Chisq)
fit_strong_concept 32 12605 12710 401.24                                       
fit_strict_concept 38 12606 12682 413.94       12.7 0.036287       6    0.04806
                    
fit_strong_concept  
fit_strict_concept *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Good model fit across all model specifications (except for RMSEA). Chi^2 tests indicate that strong measurement invariance is given (very close to .05).

4.2 Big Five: from T1 to T2

Testing for measurement invariance of the latent BFI-2 traits across time, from T1 to T2.

4.2.1 Extraversion: current-personality (from T1 to T2)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*extra_curr_par1_t1 + lambda1*extra_curr_par1_t1 + extra_curr_par2_t1 + extra_curr_par3_t1
extra_curr2 =~ NA*extra_curr_par1_t2 + lambda1*extra_curr_par1_t2 + extra_curr_par2_t2 + extra_curr_par3_t2

# Intercepts
extra_curr_par1_t1 ~ i1*1
extra_curr_par2_t1 ~ 1
extra_curr_par3_t1 ~ 1

extra_curr_par1_t2 ~ i1*1
extra_curr_par2_t2 ~ 1
extra_curr_par3_t2 ~ 1

# Unique Variances
extra_curr_par1_t1 ~~ extra_curr_par1_t1
extra_curr_par2_t1 ~~ extra_curr_par2_t1
extra_curr_par3_t1 ~~ extra_curr_par3_t1

extra_curr_par1_t2 ~~ extra_curr_par1_t2
extra_curr_par2_t2 ~~ extra_curr_par2_t2
extra_curr_par3_t2 ~~ extra_curr_par3_t2

# Latent Variable Means
extra_curr1 ~ 0*1
extra_curr2 ~ 1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
extra_curr2 ~~ extra_curr2
extra_curr1 ~~ extra_curr2
'
fit_configural_extra_curr <- cfa(configural_extra_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural_extra_curr, fit.measures = TRUE)

# Weak invariance model
weak_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*extra_curr_par1_t1 + lambda1*extra_curr_par1_t1 + lambda2*extra_curr_par2_t1 + lambda3*extra_curr_par3_t1
extra_curr2 =~ NA*extra_curr_par1_t2 + lambda1*extra_curr_par1_t2 + lambda2*extra_curr_par2_t2 + lambda3*extra_curr_par3_t2

# Intercepts
extra_curr_par1_t1 ~ i1*1
extra_curr_par2_t1 ~ 1
extra_curr_par3_t1 ~ 1

extra_curr_par1_t2 ~ i1*1
extra_curr_par2_t2 ~ 1
extra_curr_par3_t2 ~ 1

# Unique Variances
extra_curr_par1_t1 ~~ extra_curr_par1_t1
extra_curr_par2_t1 ~~ extra_curr_par2_t1
extra_curr_par3_t1 ~~ extra_curr_par3_t1

extra_curr_par1_t2 ~~ extra_curr_par1_t2
extra_curr_par2_t2 ~~ extra_curr_par2_t2
extra_curr_par3_t2 ~~ extra_curr_par3_t2

# Latent Variable Means
extra_curr1 ~ 0*1
extra_curr2 ~ 1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
extra_curr2 ~~ extra_curr2
extra_curr1 ~~ extra_curr2
'
fit_weak_extra_curr <- cfa(weak_extra_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak_extra_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*extra_curr_par1_t1 + lambda1*extra_curr_par1_t1 + lambda2*extra_curr_par2_t1 + lambda3*extra_curr_par3_t1
extra_curr2 =~ NA*extra_curr_par1_t2 + lambda1*extra_curr_par1_t2 + lambda2*extra_curr_par2_t2 + lambda3*extra_curr_par3_t2

# Intercepts
extra_curr_par1_t1 ~ i1*1
extra_curr_par2_t1 ~ i2*1
extra_curr_par3_t1 ~ i3*1

extra_curr_par1_t2 ~ i1*1
extra_curr_par2_t2 ~ i2*1
extra_curr_par3_t2 ~ i3*1

# Unique Variances
extra_curr_par1_t1 ~~ extra_curr_par1_t1
extra_curr_par2_t1 ~~ extra_curr_par2_t1
extra_curr_par3_t1 ~~ extra_curr_par3_t1

extra_curr_par1_t2 ~~ extra_curr_par1_t2
extra_curr_par2_t2 ~~ extra_curr_par2_t2
extra_curr_par3_t2 ~~ extra_curr_par3_t2

# Latent Variable Means
extra_curr1 ~ 0*1
extra_curr2 ~ 1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
extra_curr2 ~~ extra_curr2
extra_curr1 ~~ extra_curr2
'
fit_strong_extra_curr <- cfa(strong_extra_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong_extra_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*extra_curr_par1_t1 + lambda1*extra_curr_par1_t1 + lambda2*extra_curr_par2_t1 + lambda3*extra_curr_par3_t1
extra_curr2 =~ NA*extra_curr_par1_t2 + lambda1*extra_curr_par1_t2 + lambda2*extra_curr_par2_t2 + lambda3*extra_curr_par3_t2

# Intercepts
extra_curr_par1_t1 ~ i1*1
extra_curr_par2_t1 ~ i2*1
extra_curr_par3_t1 ~ i3*1

extra_curr_par1_t2 ~ i1*1
extra_curr_par2_t2 ~ i2*1
extra_curr_par3_t2 ~ i3*1

# Unique Variances
extra_curr_par1_t1 ~~ u1*extra_curr_par1_t1
extra_curr_par2_t1 ~~ u2*extra_curr_par2_t1
extra_curr_par3_t1 ~~ u3*extra_curr_par3_t1

extra_curr_par1_t2 ~~ u1*extra_curr_par1_t2
extra_curr_par2_t2 ~~ u2*extra_curr_par2_t2
extra_curr_par3_t2 ~~ u3*extra_curr_par3_t2

# Latent Variable Means
extra_curr1 ~ 0*1
extra_curr2 ~ 1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
extra_curr2 ~~ extra_curr2
extra_curr1 ~~ extra_curr2
'
fit_strict_extra_curr <- cfa(strict_extra_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict_extra_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_extra_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_extra_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_extra_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_extra_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   674    19  425. 7518. 7603. 0.814 0.651 0.278 0.0710
2 weak         674    17  426. 7515. 7592. 0.814 0.721 0.249 0.0727
3 strong       674    15  441. 7525. 7593. 0.809 0.761 0.230 0.0739
4 strict       674    12  442. 7520. 7574. 0.810 0.810 0.205 0.0764
# chi-square difference test for nested models 
anova(fit_configural_extra_curr, fit_weak_extra_curr)

Chi-Squared Difference Test

                          Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_extra_curr  8 7517.6 7603.4 425.15                         
fit_weak_extra_curr       10 7514.8 7591.6 426.37     1.2267     0       2
                          Pr(>Chisq)
fit_configural_extra_curr           
fit_weak_extra_curr           0.5415
anova(fit_weak_extra_curr, fit_strong_extra_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_weak_extra_curr   10 7514.8 7591.6 426.37                            
fit_strong_extra_curr 12 7525.0 7592.7 440.53     14.159 0.094974       2
                      Pr(>Chisq)    
fit_weak_extra_curr                 
fit_strong_extra_curr  0.0008422 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(fit_strong_extra_curr, fit_strict_extra_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong_extra_curr 12 7525.0 7592.7 440.53                         
fit_strict_extra_curr 15 7520.2 7574.4 441.73     1.1995     0       3
                      Pr(>Chisq)
fit_strong_extra_curr           
fit_strict_extra_curr     0.7531

Model fit still not satisfactory. Chi^2 tests indicate that weak measurement invariance is given.

4.2.2 Extraversion: ideal-personality (from T1 to T2)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*extra_ideal_par1_t1 + lambda1*extra_ideal_par1_t1 + extra_ideal_par2_t1 + extra_ideal_par3_t1
extra_ideal2 =~ NA*extra_ideal_par1_t2 + lambda1*extra_ideal_par1_t2 + extra_ideal_par2_t2 + extra_ideal_par3_t2

# Intercepts
extra_ideal_par1_t1 ~ i1*1
extra_ideal_par2_t1 ~ 1
extra_ideal_par3_t1 ~ 1

extra_ideal_par1_t2 ~ i1*1
extra_ideal_par2_t2 ~ 1
extra_ideal_par3_t2 ~ 1

# Unique Variances
extra_ideal_par1_t1 ~~ extra_ideal_par1_t1
extra_ideal_par2_t1 ~~ extra_ideal_par2_t1
extra_ideal_par3_t1 ~~ extra_ideal_par3_t1

extra_ideal_par1_t2 ~~ extra_ideal_par1_t2
extra_ideal_par2_t2 ~~ extra_ideal_par2_t2
extra_ideal_par3_t2 ~~ extra_ideal_par3_t2

# Latent Variable Means
extra_ideal1 ~ 0*1
extra_ideal2 ~ 1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
extra_ideal2 ~~ extra_ideal2
extra_ideal1 ~~ extra_ideal2
'
fit_configural_extra_ideal <- cfa(configural_extra_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural_extra_ideal, fit.measures = TRUE)

# Weak invariance model
weak_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*extra_ideal_par1_t1 + lambda1*extra_ideal_par1_t1 + lambda2*extra_ideal_par2_t1 + lambda3*extra_ideal_par3_t1
extra_ideal2 =~ NA*extra_ideal_par1_t2 + lambda1*extra_ideal_par1_t2 + lambda2*extra_ideal_par2_t2 + lambda3*extra_ideal_par3_t2

# Intercepts
extra_ideal_par1_t1 ~ i1*1
extra_ideal_par2_t1 ~ 1
extra_ideal_par3_t1 ~ 1

extra_ideal_par1_t2 ~ i1*1
extra_ideal_par2_t2 ~ 1
extra_ideal_par3_t2 ~ 1

# Unique Variances
extra_ideal_par1_t1 ~~ extra_ideal_par1_t1
extra_ideal_par2_t1 ~~ extra_ideal_par2_t1
extra_ideal_par3_t1 ~~ extra_ideal_par3_t1

extra_ideal_par1_t2 ~~ extra_ideal_par1_t2
extra_ideal_par2_t2 ~~ extra_ideal_par2_t2
extra_ideal_par3_t2 ~~ extra_ideal_par3_t2

# Latent Variable Means
extra_ideal1 ~ 0*1
extra_ideal2 ~ 1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
extra_ideal2 ~~ extra_ideal2
extra_ideal1 ~~ extra_ideal2
'
fit_weak_extra_ideal <- cfa(weak_extra_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak_extra_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*extra_ideal_par1_t1 + lambda1*extra_ideal_par1_t1 + lambda2*extra_ideal_par2_t1 + lambda3*extra_ideal_par3_t1
extra_ideal2 =~ NA*extra_ideal_par1_t2 + lambda1*extra_ideal_par1_t2 + lambda2*extra_ideal_par2_t2 + lambda3*extra_ideal_par3_t2

# Intercepts
extra_ideal_par1_t1 ~ i1*1
extra_ideal_par2_t1 ~ i2*1
extra_ideal_par3_t1 ~ i3*1

extra_ideal_par1_t2 ~ i1*1
extra_ideal_par2_t2 ~ i2*1
extra_ideal_par3_t2 ~ i3*1

# Unique Variances
extra_ideal_par1_t1 ~~ extra_ideal_par1_t1
extra_ideal_par2_t1 ~~ extra_ideal_par2_t1
extra_ideal_par3_t1 ~~ extra_ideal_par3_t1

extra_ideal_par1_t2 ~~ extra_ideal_par1_t2
extra_ideal_par2_t2 ~~ extra_ideal_par2_t2
extra_ideal_par3_t2 ~~ extra_ideal_par3_t2

# Latent Variable Means
extra_ideal1 ~ 0*1
extra_ideal2 ~ 1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
extra_ideal2 ~~ extra_ideal2
extra_ideal1 ~~ extra_ideal2
'
fit_strong_extra_ideal <- cfa(strong_extra_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong_extra_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*extra_ideal_par1_t1 + lambda1*extra_ideal_par1_t1 + lambda2*extra_ideal_par2_t1 + lambda3*extra_ideal_par3_t1
extra_ideal2 =~ NA*extra_ideal_par1_t2 + lambda1*extra_ideal_par1_t2 + lambda2*extra_ideal_par2_t2 + lambda3*extra_ideal_par3_t2

# Intercepts
extra_ideal_par1_t1 ~ i1*1
extra_ideal_par2_t1 ~ i2*1
extra_ideal_par3_t1 ~ i3*1

extra_ideal_par1_t2 ~ i1*1
extra_ideal_par2_t2 ~ i2*1
extra_ideal_par3_t2 ~ i3*1

# Unique Variances
extra_ideal_par1_t1 ~~ u1*extra_ideal_par1_t1
extra_ideal_par2_t1 ~~ u2*extra_ideal_par2_t1
extra_ideal_par3_t1 ~~ u3*extra_ideal_par3_t1

extra_ideal_par1_t2 ~~ u1*extra_ideal_par1_t2
extra_ideal_par2_t2 ~~ u2*extra_ideal_par2_t2
extra_ideal_par3_t2 ~~ u3*extra_ideal_par3_t2

# Latent Variable Means
extra_ideal1 ~ 0*1
extra_ideal2 ~ 1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
extra_ideal2 ~~ extra_ideal2
extra_ideal1 ~~ extra_ideal2
'
fit_strict_extra_ideal <- cfa(strict_extra_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict_extra_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_extra_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_extra_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_extra_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_extra_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   674    19  164. 6257. 6343. 0.855 0.728 0.170 0.0577
2 weak         674    17  165. 6254. 6331. 0.856 0.783 0.152 0.0624
3 strong       674    15  166. 6251. 6319. 0.856 0.820 0.138 0.0645
4 strict       674    12  172. 6251. 6305. 0.854 0.854 0.125 0.0796
# chi-square difference test for nested models 
anova(fit_configural_extra_ideal, fit_weak_extra_ideal)

Chi-Squared Difference Test

                           Df    AIC    BIC Chisq Chisq diff RMSEA Df diff
fit_configural_extra_ideal  8 6256.9 6342.6 163.9                         
fit_weak_extra_ideal       10 6254.1 6330.8 165.1     1.1911     0       2
                           Pr(>Chisq)
fit_configural_extra_ideal           
fit_weak_extra_ideal           0.5513
anova(fit_weak_extra_ideal, fit_strong_extra_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC Chisq Chisq diff RMSEA Df diff
fit_weak_extra_ideal   10 6254.1 6330.8 165.1                         
fit_strong_extra_ideal 12 6251.3 6319.0 166.3     1.2085     0       2
                       Pr(>Chisq)
fit_weak_extra_ideal             
fit_strong_extra_ideal     0.5465
anova(fit_strong_extra_ideal, fit_strict_extra_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_strong_extra_ideal 12 6251.3 6319.0 166.30                            
fit_strict_extra_ideal 15 6251.1 6305.2 172.11      5.801 0.037219       3
                       Pr(>Chisq)
fit_strong_extra_ideal           
fit_strict_extra_ideal     0.1217

Model fit still not satisfactory across all stages of measurement invariance. Chi^2 tests indicate that strict measurement invariance is given.

4.2.3 Agreeableness: current-personality (from T1 to T2)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*agree_curr_par1_t1 + lambda1*agree_curr_par1_t1 + agree_curr_par2_t1 + agree_curr_par3_t1
agree_curr2 =~ NA*agree_curr_par1_t2 + lambda1*agree_curr_par1_t2 + agree_curr_par2_t2 + agree_curr_par3_t2

# Intercepts
agree_curr_par1_t1 ~ i1*1
agree_curr_par2_t1 ~ 1
agree_curr_par3_t1 ~ 1

agree_curr_par1_t2 ~ i1*1
agree_curr_par2_t2 ~ 1
agree_curr_par3_t2 ~ 1

# Unique Variances
agree_curr_par1_t1 ~~ agree_curr_par1_t1
agree_curr_par2_t1 ~~ agree_curr_par2_t1
agree_curr_par3_t1 ~~ agree_curr_par3_t1

agree_curr_par1_t2 ~~ agree_curr_par1_t2
agree_curr_par2_t2 ~~ agree_curr_par2_t2
agree_curr_par3_t2 ~~ agree_curr_par3_t2

# Latent Variable Means
agree_curr1 ~ 0*1
agree_curr2 ~ 1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
agree_curr2 ~~ agree_curr2
agree_curr1 ~~ agree_curr2
'
fit_configural_agree_curr <- cfa(configural_agree_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural_agree_curr, fit.measures = TRUE)

# Weak invariance model
weak_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*agree_curr_par1_t1 + lambda1*agree_curr_par1_t1 + lambda2*agree_curr_par2_t1 + lambda3*agree_curr_par3_t1
agree_curr2 =~ NA*agree_curr_par1_t2 + lambda1*agree_curr_par1_t2 + lambda2*agree_curr_par2_t2 + lambda3*agree_curr_par3_t2

# Intercepts
agree_curr_par1_t1 ~ i1*1
agree_curr_par2_t1 ~ 1
agree_curr_par3_t1 ~ 1

agree_curr_par1_t2 ~ i1*1
agree_curr_par2_t2 ~ 1
agree_curr_par3_t2 ~ 1

# Unique Variances
agree_curr_par1_t1 ~~ agree_curr_par1_t1
agree_curr_par2_t1 ~~ agree_curr_par2_t1
agree_curr_par3_t1 ~~ agree_curr_par3_t1

agree_curr_par1_t2 ~~ agree_curr_par1_t2
agree_curr_par2_t2 ~~ agree_curr_par2_t2
agree_curr_par3_t2 ~~ agree_curr_par3_t2

# Latent Variable Means
agree_curr1 ~ 0*1
agree_curr2 ~ 1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
agree_curr2 ~~ agree_curr2
agree_curr1 ~~ agree_curr2
'
fit_weak_agree_curr <- cfa(weak_agree_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak_agree_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*agree_curr_par1_t1 + lambda1*agree_curr_par1_t1 + lambda2*agree_curr_par2_t1 + lambda3*agree_curr_par3_t1
agree_curr2 =~ NA*agree_curr_par1_t2 + lambda1*agree_curr_par1_t2 + lambda2*agree_curr_par2_t2 + lambda3*agree_curr_par3_t2

# Intercepts
agree_curr_par1_t1 ~ i1*1
agree_curr_par2_t1 ~ i2*1
agree_curr_par3_t1 ~ i3*1

agree_curr_par1_t2 ~ i1*1
agree_curr_par2_t2 ~ i2*1
agree_curr_par3_t2 ~ i3*1

# Unique Variances
agree_curr_par1_t1 ~~ agree_curr_par1_t1
agree_curr_par2_t1 ~~ agree_curr_par2_t1
agree_curr_par3_t1 ~~ agree_curr_par3_t1

agree_curr_par1_t2 ~~ agree_curr_par1_t2
agree_curr_par2_t2 ~~ agree_curr_par2_t2
agree_curr_par3_t2 ~~ agree_curr_par3_t2

# Latent Variable Means
agree_curr1 ~ 0*1
agree_curr2 ~ 1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
agree_curr2 ~~ agree_curr2
agree_curr1 ~~ agree_curr2
'
fit_strong_agree_curr <- cfa(strong_agree_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong_agree_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*agree_curr_par1_t1 + lambda1*agree_curr_par1_t1 + lambda2*agree_curr_par2_t1 + lambda3*agree_curr_par3_t1
agree_curr2 =~ NA*agree_curr_par1_t2 + lambda1*agree_curr_par1_t2 + lambda2*agree_curr_par2_t2 + lambda3*agree_curr_par3_t2

# Intercepts
agree_curr_par1_t1 ~ i1*1
agree_curr_par2_t1 ~ i2*1
agree_curr_par3_t1 ~ i3*1

agree_curr_par1_t2 ~ i1*1
agree_curr_par2_t2 ~ i2*1
agree_curr_par3_t2 ~ i3*1

# Unique Variances
agree_curr_par1_t1 ~~ u1*agree_curr_par1_t1
agree_curr_par2_t1 ~~ u2*agree_curr_par2_t1
agree_curr_par3_t1 ~~ u3*agree_curr_par3_t1

agree_curr_par1_t2 ~~ u1*agree_curr_par1_t2
agree_curr_par2_t2 ~~ u2*agree_curr_par2_t2
agree_curr_par3_t2 ~~ u3*agree_curr_par3_t2

# Latent Variable Means
agree_curr1 ~ 0*1
agree_curr2 ~ 1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
agree_curr2 ~~ agree_curr2
agree_curr1 ~~ agree_curr2
'
fit_strict_agree_curr <- cfa(strict_agree_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict_agree_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_agree_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_agree_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_agree_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_agree_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   674    19  198. 6007. 6092. 0.866 0.749 0.188 0.0694
2 weak         674    17  199. 6003. 6080. 0.867 0.801 0.167 0.0739
3 strong       674    15  199. 6000. 6067. 0.868 0.835 0.152 0.0747
4 strict       674    12  200. 5994. 6048. 0.870 0.870 0.135 0.0726
# chi-square difference test for nested models 
anova(fit_configural_agree_curr, fit_weak_agree_curr)

Chi-Squared Difference Test

                          Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_agree_curr  8 6006.6 6092.3 198.11                         
fit_weak_agree_curr       10 6003.4 6080.2 198.99    0.87407     0       2
                          Pr(>Chisq)
fit_configural_agree_curr           
fit_weak_agree_curr            0.646
anova(fit_weak_agree_curr, fit_strong_agree_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak_agree_curr   10 6003.4 6080.2 198.99                         
fit_strong_agree_curr 12 5999.6 6067.3 199.12    0.12713     0       2
                      Pr(>Chisq)
fit_weak_agree_curr             
fit_strong_agree_curr     0.9384
anova(fit_strong_agree_curr, fit_strict_agree_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong_agree_curr 12 5999.6 6067.3 199.12                         
fit_strict_agree_curr 15 5994.3 6048.5 199.88    0.76272     0       3
                      Pr(>Chisq)
fit_strong_agree_curr           
fit_strict_agree_curr     0.8584

Model fit still not satisfactory. Chi^2 tests indicate that strict measurement invariance is given.

4.2.4 Agreeableness: ideal-personality (from T1 to T2)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*agree_ideal_par1_t1 + lambda1*agree_ideal_par1_t1 + agree_ideal_par2_t1 + agree_ideal_par3_t1
agree_ideal2 =~ NA*agree_ideal_par1_t2 + lambda1*agree_ideal_par1_t2 + agree_ideal_par2_t2 + agree_ideal_par3_t2

# Intercepts
agree_ideal_par1_t1 ~ i1*1
agree_ideal_par2_t1 ~ 1
agree_ideal_par3_t1 ~ 1

agree_ideal_par1_t2 ~ i1*1
agree_ideal_par2_t2 ~ 1
agree_ideal_par3_t2 ~ 1

# Unique Variances
agree_ideal_par1_t1 ~~ agree_ideal_par1_t1
agree_ideal_par2_t1 ~~ agree_ideal_par2_t1
agree_ideal_par3_t1 ~~ agree_ideal_par3_t1

agree_ideal_par1_t2 ~~ agree_ideal_par1_t2
agree_ideal_par2_t2 ~~ agree_ideal_par2_t2
agree_ideal_par3_t2 ~~ agree_ideal_par3_t2

# Latent Variable Means
agree_ideal1 ~ 0*1
agree_ideal2 ~ 1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
agree_ideal2 ~~ agree_ideal2
agree_ideal1 ~~ agree_ideal2
'
fit_configural_agree_ideal <- cfa(configural_agree_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural_agree_ideal, fit.measures = TRUE)

# Weak invariance model
weak_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*agree_ideal_par1_t1 + lambda1*agree_ideal_par1_t1 + lambda2*agree_ideal_par2_t1 + lambda3*agree_ideal_par3_t1
agree_ideal2 =~ NA*agree_ideal_par1_t2 + lambda1*agree_ideal_par1_t2 + lambda2*agree_ideal_par2_t2 + lambda3*agree_ideal_par3_t2

# Intercepts
agree_ideal_par1_t1 ~ i1*1
agree_ideal_par2_t1 ~ 1
agree_ideal_par3_t1 ~ 1

agree_ideal_par1_t2 ~ i1*1
agree_ideal_par2_t2 ~ 1
agree_ideal_par3_t2 ~ 1

# Unique Variances
agree_ideal_par1_t1 ~~ agree_ideal_par1_t1
agree_ideal_par2_t1 ~~ agree_ideal_par2_t1
agree_ideal_par3_t1 ~~ agree_ideal_par3_t1

agree_ideal_par1_t2 ~~ agree_ideal_par1_t2
agree_ideal_par2_t2 ~~ agree_ideal_par2_t2
agree_ideal_par3_t2 ~~ agree_ideal_par3_t2

# Latent Variable Means
agree_ideal1 ~ 0*1
agree_ideal2 ~ 1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
agree_ideal2 ~~ agree_ideal2
agree_ideal1 ~~ agree_ideal2
'
fit_weak_agree_ideal <- cfa(weak_agree_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak_agree_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*agree_ideal_par1_t1 + lambda1*agree_ideal_par1_t1 + lambda2*agree_ideal_par2_t1 + lambda3*agree_ideal_par3_t1
agree_ideal2 =~ NA*agree_ideal_par1_t2 + lambda1*agree_ideal_par1_t2 + lambda2*agree_ideal_par2_t2 + lambda3*agree_ideal_par3_t2

# Intercepts
agree_ideal_par1_t1 ~ i1*1
agree_ideal_par2_t1 ~ i2*1
agree_ideal_par3_t1 ~ i3*1

agree_ideal_par1_t2 ~ i1*1
agree_ideal_par2_t2 ~ i2*1
agree_ideal_par3_t2 ~ i3*1

# Unique Variances
agree_ideal_par1_t1 ~~ agree_ideal_par1_t1
agree_ideal_par2_t1 ~~ agree_ideal_par2_t1
agree_ideal_par3_t1 ~~ agree_ideal_par3_t1

agree_ideal_par1_t2 ~~ agree_ideal_par1_t2
agree_ideal_par2_t2 ~~ agree_ideal_par2_t2
agree_ideal_par3_t2 ~~ agree_ideal_par3_t2

# Latent Variable Means
agree_ideal1 ~ 0*1
agree_ideal2 ~ 1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
agree_ideal2 ~~ agree_ideal2
agree_ideal1 ~~ agree_ideal2
'
fit_strong_agree_ideal <- cfa(strong_agree_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong_agree_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*agree_ideal_par1_t1 + lambda1*agree_ideal_par1_t1 + lambda2*agree_ideal_par2_t1 + lambda3*agree_ideal_par3_t1
agree_ideal2 =~ NA*agree_ideal_par1_t2 + lambda1*agree_ideal_par1_t2 + lambda2*agree_ideal_par2_t2 + lambda3*agree_ideal_par3_t2

# Intercepts
agree_ideal_par1_t1 ~ i1*1
agree_ideal_par2_t1 ~ i2*1
agree_ideal_par3_t1 ~ i3*1

agree_ideal_par1_t2 ~ i1*1
agree_ideal_par2_t2 ~ i2*1
agree_ideal_par3_t2 ~ i3*1

# Unique Variances
agree_ideal_par1_t1 ~~ u1*agree_ideal_par1_t1
agree_ideal_par2_t1 ~~ u2*agree_ideal_par2_t1
agree_ideal_par3_t1 ~~ u3*agree_ideal_par3_t1

agree_ideal_par1_t2 ~~ u1*agree_ideal_par1_t2
agree_ideal_par2_t2 ~~ u2*agree_ideal_par2_t2
agree_ideal_par3_t2 ~~ u3*agree_ideal_par3_t2

# Latent Variable Means
agree_ideal1 ~ 0*1
agree_ideal2 ~ 1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
agree_ideal2 ~~ agree_ideal2
agree_ideal1 ~~ agree_ideal2
'
fit_strict_agree_ideal <- cfa(strict_agree_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict_agree_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_agree_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_agree_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_agree_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_agree_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   674    19  156. 5948. 6034. 0.907 0.826 0.166 0.0511
2 weak         674    17  157. 5945. 6021. 0.908 0.862 0.148 0.0554
3 strong       674    15  157. 5941. 6009. 0.909 0.886 0.134 0.0555
4 strict       674    12  166. 5944. 5998. 0.905 0.905 0.122 0.0743
# chi-square difference test for nested models 
anova(fit_configural_agree_ideal, fit_weak_agree_ideal)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_agree_ideal  8 5947.8 6033.6 155.87                         
fit_weak_agree_ideal       10 5944.7 6021.4 156.77    0.90156     0       2
                           Pr(>Chisq)
fit_configural_agree_ideal           
fit_weak_agree_ideal           0.6371
anova(fit_weak_agree_ideal, fit_strong_agree_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak_agree_ideal   10 5944.7 6021.4 156.77                         
fit_strong_agree_ideal 12 5941.1 6008.8 157.12    0.34684     0       2
                       Pr(>Chisq)
fit_weak_agree_ideal             
fit_strong_agree_ideal     0.8408
anova(fit_strong_agree_ideal, fit_strict_agree_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_strong_agree_ideal 12 5941.1 6008.8 157.12                            
fit_strict_agree_ideal 15 5944.2 5998.4 166.26     9.1354 0.055085       3
                       Pr(>Chisq)  
fit_strong_agree_ideal             
fit_strict_agree_ideal    0.02754 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strong measurement invariance is given.

4.2.5 Conscientiousness: current-personality (from T1 to T2)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*consc_curr_par1_t1 + lambda1*consc_curr_par1_t1 + consc_curr_par2_t1 + consc_curr_par3_t1
consc_curr2 =~ NA*consc_curr_par1_t2 + lambda1*consc_curr_par1_t2 + consc_curr_par2_t2 + consc_curr_par3_t2

# Intercepts
consc_curr_par1_t1 ~ i1*1
consc_curr_par2_t1 ~ 1
consc_curr_par3_t1 ~ 1

consc_curr_par1_t2 ~ i1*1
consc_curr_par2_t2 ~ 1
consc_curr_par3_t2 ~ 1

# Unique Variances
consc_curr_par1_t1 ~~ consc_curr_par1_t1
consc_curr_par2_t1 ~~ consc_curr_par2_t1
consc_curr_par3_t1 ~~ consc_curr_par3_t1

consc_curr_par1_t2 ~~ consc_curr_par1_t2
consc_curr_par2_t2 ~~ consc_curr_par2_t2
consc_curr_par3_t2 ~~ consc_curr_par3_t2

# Latent Variable Means
consc_curr1 ~ 0*1
consc_curr2 ~ 1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
consc_curr2 ~~ consc_curr2
consc_curr1 ~~ consc_curr2
'
fit_configural_consc_curr <- cfa(configural_consc_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural_consc_curr, fit.measures = TRUE)

# Weak invariance model
weak_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*consc_curr_par1_t1 + lambda1*consc_curr_par1_t1 + lambda2*consc_curr_par2_t1 + lambda3*consc_curr_par3_t1
consc_curr2 =~ NA*consc_curr_par1_t2 + lambda1*consc_curr_par1_t2 + lambda2*consc_curr_par2_t2 + lambda3*consc_curr_par3_t2

# Intercepts
consc_curr_par1_t1 ~ i1*1
consc_curr_par2_t1 ~ 1
consc_curr_par3_t1 ~ 1

consc_curr_par1_t2 ~ i1*1
consc_curr_par2_t2 ~ 1
consc_curr_par3_t2 ~ 1

# Unique Variances
consc_curr_par1_t1 ~~ consc_curr_par1_t1
consc_curr_par2_t1 ~~ consc_curr_par2_t1
consc_curr_par3_t1 ~~ consc_curr_par3_t1

consc_curr_par1_t2 ~~ consc_curr_par1_t2
consc_curr_par2_t2 ~~ consc_curr_par2_t2
consc_curr_par3_t2 ~~ consc_curr_par3_t2

# Latent Variable Means
consc_curr1 ~ 0*1
consc_curr2 ~ 1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
consc_curr2 ~~ consc_curr2
consc_curr1 ~~ consc_curr2
'
fit_weak_consc_curr <- cfa(weak_consc_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak_consc_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*consc_curr_par1_t1 + lambda1*consc_curr_par1_t1 + lambda2*consc_curr_par2_t1 + lambda3*consc_curr_par3_t1
consc_curr2 =~ NA*consc_curr_par1_t2 + lambda1*consc_curr_par1_t2 + lambda2*consc_curr_par2_t2 + lambda3*consc_curr_par3_t2

# Intercepts
consc_curr_par1_t1 ~ i1*1
consc_curr_par2_t1 ~ i2*1
consc_curr_par3_t1 ~ i3*1

consc_curr_par1_t2 ~ i1*1
consc_curr_par2_t2 ~ i2*1
consc_curr_par3_t2 ~ i3*1

# Unique Variances
consc_curr_par1_t1 ~~ consc_curr_par1_t1
consc_curr_par2_t1 ~~ consc_curr_par2_t1
consc_curr_par3_t1 ~~ consc_curr_par3_t1

consc_curr_par1_t2 ~~ consc_curr_par1_t2
consc_curr_par2_t2 ~~ consc_curr_par2_t2
consc_curr_par3_t2 ~~ consc_curr_par3_t2

# Latent Variable Means
consc_curr1 ~ 0*1
consc_curr2 ~ 1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
consc_curr2 ~~ consc_curr2
consc_curr1 ~~ consc_curr2
'
fit_strong_consc_curr <- cfa(strong_consc_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong_consc_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*consc_curr_par1_t1 + lambda1*consc_curr_par1_t1 + lambda2*consc_curr_par2_t1 + lambda3*consc_curr_par3_t1
consc_curr2 =~ NA*consc_curr_par1_t2 + lambda1*consc_curr_par1_t2 + lambda2*consc_curr_par2_t2 + lambda3*consc_curr_par3_t2

# Intercepts
consc_curr_par1_t1 ~ i1*1
consc_curr_par2_t1 ~ i2*1
consc_curr_par3_t1 ~ i3*1

consc_curr_par1_t2 ~ i1*1
consc_curr_par2_t2 ~ i2*1
consc_curr_par3_t2 ~ i3*1

# Unique Variances
consc_curr_par1_t1 ~~ u1*consc_curr_par1_t1
consc_curr_par2_t1 ~~ u2*consc_curr_par2_t1
consc_curr_par3_t1 ~~ u3*consc_curr_par3_t1

consc_curr_par1_t2 ~~ u1*consc_curr_par1_t2
consc_curr_par2_t2 ~~ u2*consc_curr_par2_t2
consc_curr_par3_t2 ~~ u3*consc_curr_par3_t2

# Latent Variable Means
consc_curr1 ~ 0*1
consc_curr2 ~ 1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
consc_curr2 ~~ consc_curr2
consc_curr1 ~~ consc_curr2
'
fit_strict_consc_curr <- cfa(strict_consc_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict_consc_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_consc_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_consc_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_consc_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_consc_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   674    19  219. 6528. 6614. 0.931 0.871 0.198 0.0329
2 weak         674    17  219. 6524. 6601. 0.932 0.898 0.176 0.0331
3 strong       674    15  221. 6522. 6589. 0.932 0.915 0.161 0.0339
4 strict       674    12  221. 6516. 6570. 0.933 0.933 0.143 0.0347
# chi-square difference test for nested models 
anova(fit_configural_consc_curr, fit_weak_consc_curr)

Chi-Squared Difference Test

                          Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_consc_curr  8 6527.8 6613.6 218.86                         
fit_weak_consc_curr       10 6524.0 6600.7 219.02    0.15856     0       2
                          Pr(>Chisq)
fit_configural_consc_curr           
fit_weak_consc_curr           0.9238
anova(fit_weak_consc_curr, fit_strong_consc_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak_consc_curr   10 6524.0 6600.7 219.02                         
fit_strong_consc_curr 12 6521.7 6589.4 220.72     1.7006     0       2
                      Pr(>Chisq)
fit_weak_consc_curr             
fit_strong_consc_curr     0.4273
anova(fit_strong_consc_curr, fit_strict_consc_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong_consc_curr 12 6521.7 6589.4 220.72                         
fit_strict_consc_curr 15 6516.3 6570.5 221.34    0.62505     0       3
                      Pr(>Chisq)
fit_strong_consc_curr           
fit_strict_consc_curr     0.8907

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.2.6 Conscientiousness: ideal-personality (from T1 to T2)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*consc_ideal_par1_t1 + lambda1*consc_ideal_par1_t1 + consc_ideal_par2_t1 + consc_ideal_par3_t1
consc_ideal2 =~ NA*consc_ideal_par1_t2 + lambda1*consc_ideal_par1_t2 + consc_ideal_par2_t2 + consc_ideal_par3_t2

# Intercepts
consc_ideal_par1_t1 ~ i1*1
consc_ideal_par2_t1 ~ 1
consc_ideal_par3_t1 ~ 1

consc_ideal_par1_t2 ~ i1*1
consc_ideal_par2_t2 ~ 1
consc_ideal_par3_t2 ~ 1

# Unique Variances
consc_ideal_par1_t1 ~~ consc_ideal_par1_t1
consc_ideal_par2_t1 ~~ consc_ideal_par2_t1
consc_ideal_par3_t1 ~~ consc_ideal_par3_t1

consc_ideal_par1_t2 ~~ consc_ideal_par1_t2
consc_ideal_par2_t2 ~~ consc_ideal_par2_t2
consc_ideal_par3_t2 ~~ consc_ideal_par3_t2

# Latent Variable Means
consc_ideal1 ~ 0*1
consc_ideal2 ~ 1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
consc_ideal2 ~~ consc_ideal2
consc_ideal1 ~~ consc_ideal2
'
fit_configural_consc_ideal <- cfa(configural_consc_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural_consc_ideal, fit.measures = TRUE)

# Weak invariance model
weak_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*consc_ideal_par1_t1 + lambda1*consc_ideal_par1_t1 + lambda2*consc_ideal_par2_t1 + lambda3*consc_ideal_par3_t1
consc_ideal2 =~ NA*consc_ideal_par1_t2 + lambda1*consc_ideal_par1_t2 + lambda2*consc_ideal_par2_t2 + lambda3*consc_ideal_par3_t2

# Intercepts
consc_ideal_par1_t1 ~ i1*1
consc_ideal_par2_t1 ~ 1
consc_ideal_par3_t1 ~ 1

consc_ideal_par1_t2 ~ i1*1
consc_ideal_par2_t2 ~ 1
consc_ideal_par3_t2 ~ 1

# Unique Variances
consc_ideal_par1_t1 ~~ consc_ideal_par1_t1
consc_ideal_par2_t1 ~~ consc_ideal_par2_t1
consc_ideal_par3_t1 ~~ consc_ideal_par3_t1

consc_ideal_par1_t2 ~~ consc_ideal_par1_t2
consc_ideal_par2_t2 ~~ consc_ideal_par2_t2
consc_ideal_par3_t2 ~~ consc_ideal_par3_t2

# Latent Variable Means
consc_ideal1 ~ 0*1
consc_ideal2 ~ 1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
consc_ideal2 ~~ consc_ideal2
consc_ideal1 ~~ consc_ideal2
'
fit_weak_consc_ideal <- cfa(weak_consc_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak_consc_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*consc_ideal_par1_t1 + lambda1*consc_ideal_par1_t1 + lambda2*consc_ideal_par2_t1 + lambda3*consc_ideal_par3_t1
consc_ideal2 =~ NA*consc_ideal_par1_t2 + lambda1*consc_ideal_par1_t2 + lambda2*consc_ideal_par2_t2 + lambda3*consc_ideal_par3_t2

# Intercepts
consc_ideal_par1_t1 ~ i1*1
consc_ideal_par2_t1 ~ i2*1
consc_ideal_par3_t1 ~ i3*1

consc_ideal_par1_t2 ~ i1*1
consc_ideal_par2_t2 ~ i2*1
consc_ideal_par3_t2 ~ i3*1

# Unique Variances
consc_ideal_par1_t1 ~~ consc_ideal_par1_t1
consc_ideal_par2_t1 ~~ consc_ideal_par2_t1
consc_ideal_par3_t1 ~~ consc_ideal_par3_t1

consc_ideal_par1_t2 ~~ consc_ideal_par1_t2
consc_ideal_par2_t2 ~~ consc_ideal_par2_t2
consc_ideal_par3_t2 ~~ consc_ideal_par3_t2

# Latent Variable Means
consc_ideal1 ~ 0*1
consc_ideal2 ~ 1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
consc_ideal2 ~~ consc_ideal2
consc_ideal1 ~~ consc_ideal2
'
fit_strong_consc_ideal <- cfa(strong_consc_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong_consc_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*consc_ideal_par1_t1 + lambda1*consc_ideal_par1_t1 + lambda2*consc_ideal_par2_t1 + lambda3*consc_ideal_par3_t1
consc_ideal2 =~ NA*consc_ideal_par1_t2 + lambda1*consc_ideal_par1_t2 + lambda2*consc_ideal_par2_t2 + lambda3*consc_ideal_par3_t2

# Intercepts
consc_ideal_par1_t1 ~ i1*1
consc_ideal_par2_t1 ~ i2*1
consc_ideal_par3_t1 ~ i3*1

consc_ideal_par1_t2 ~ i1*1
consc_ideal_par2_t2 ~ i2*1
consc_ideal_par3_t2 ~ i3*1

# Unique Variances
consc_ideal_par1_t1 ~~ u1*consc_ideal_par1_t1
consc_ideal_par2_t1 ~~ u2*consc_ideal_par2_t1
consc_ideal_par3_t1 ~~ u3*consc_ideal_par3_t1

consc_ideal_par1_t2 ~~ u1*consc_ideal_par1_t2
consc_ideal_par2_t2 ~~ u2*consc_ideal_par2_t2
consc_ideal_par3_t2 ~~ u3*consc_ideal_par3_t2

# Latent Variable Means
consc_ideal1 ~ 0*1
consc_ideal2 ~ 1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
consc_ideal2 ~~ consc_ideal2
consc_ideal1 ~~ consc_ideal2
'
fit_strict_consc_ideal <- cfa(strict_consc_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict_consc_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_consc_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_consc_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_consc_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_consc_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   674    19  136. 5143. 5229. 0.920 0.850 0.154 0.0436
2 weak         674    17  137. 5140. 5216. 0.921 0.882 0.137 0.0472
3 strong       674    15  137. 5136. 5204. 0.922 0.902 0.125 0.0484
4 strict       674    12  138. 5131. 5185. 0.923 0.923 0.110 0.0500
# chi-square difference test for nested models 
anova(fit_configural_consc_ideal, fit_weak_consc_ideal)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_consc_ideal  8 5143.4 5229.1 136.45                         
fit_weak_consc_ideal       10 5139.7 5216.4 136.80    0.35043     0       2
                           Pr(>Chisq)
fit_configural_consc_ideal           
fit_weak_consc_ideal           0.8393
anova(fit_weak_consc_ideal, fit_strong_consc_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak_consc_ideal   10 5139.7 5216.4 136.80                         
fit_strong_consc_ideal 12 5136.3 5204.0 137.43    0.62624     0       2
                       Pr(>Chisq)
fit_weak_consc_ideal             
fit_strong_consc_ideal     0.7312
anova(fit_strong_consc_ideal, fit_strict_consc_ideal)

Chi-Squared Difference Test

                       Df    AIC  BIC  Chisq Chisq diff RMSEA Df diff
fit_strong_consc_ideal 12 5136.3 5204 137.43                         
fit_strict_consc_ideal 15 5130.8 5185 137.93    0.50006     0       3
                       Pr(>Chisq)
fit_strong_consc_ideal           
fit_strict_consc_ideal     0.9189

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.2.7 Neuroticism: current-personality (from T1 to T2)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_neuro_curr <- '
# Define the latent factors
neuro_curr1 =~ NA*neuro_curr_par1_t1 + lambda1*neuro_curr_par1_t1 + neuro_curr_par2_t1 + neuro_curr_par3_t1
neuro_curr2 =~ NA*neuro_curr_par1_t2 + lambda1*neuro_curr_par1_t2 + neuro_curr_par2_t2 + neuro_curr_par3_t2

# Intercepts
neuro_curr_par1_t1 ~ i1*1
neuro_curr_par2_t1 ~ 1
neuro_curr_par3_t1 ~ 1

neuro_curr_par1_t2 ~ i1*1
neuro_curr_par2_t2 ~ 1
neuro_curr_par3_t2 ~ 1

# Unique Variances
neuro_curr_par1_t1 ~~ neuro_curr_par1_t1
neuro_curr_par2_t1 ~~ neuro_curr_par2_t1
neuro_curr_par3_t1 ~~ neuro_curr_par3_t1

neuro_curr_par1_t2 ~~ neuro_curr_par1_t2
neuro_curr_par2_t2 ~~ neuro_curr_par2_t2
neuro_curr_par3_t2 ~~ neuro_curr_par3_t2

# Latent Variable Means
neuro_curr1 ~ 0*1
neuro_curr2 ~ 1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
neuro_curr2 ~~ neuro_curr2
neuro_curr1 ~~ neuro_curr2
'
fit_configural_neuro_curr <- cfa(configural_neuro_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural_neuro_curr, fit.measures = TRUE)

# Weak invariance model
weak_neuro_curr <- '
# Define the latent factors
neuro_curr1 =~ NA*neuro_curr_par1_t1 + lambda1*neuro_curr_par1_t1 + lambda2*neuro_curr_par2_t1 + lambda3*neuro_curr_par3_t1
neuro_curr2 =~ NA*neuro_curr_par1_t2 + lambda1*neuro_curr_par1_t2 + lambda2*neuro_curr_par2_t2 + lambda3*neuro_curr_par3_t2

# Intercepts
neuro_curr_par1_t1 ~ i1*1
neuro_curr_par2_t1 ~ 1
neuro_curr_par3_t1 ~ 1

neuro_curr_par1_t2 ~ i1*1
neuro_curr_par2_t2 ~ 1
neuro_curr_par3_t2 ~ 1

# Unique Variances
neuro_curr_par1_t1 ~~ neuro_curr_par1_t1
neuro_curr_par2_t1 ~~ neuro_curr_par2_t1
neuro_curr_par3_t1 ~~ neuro_curr_par3_t1

neuro_curr_par1_t2 ~~ neuro_curr_par1_t2
neuro_curr_par2_t2 ~~ neuro_curr_par2_t2
neuro_curr_par3_t2 ~~ neuro_curr_par3_t2

# Latent Variable Means
neuro_curr1 ~ 0*1
neuro_curr2 ~ 1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
neuro_curr2 ~~ neuro_curr2
neuro_curr1 ~~ neuro_curr2
'
fit_weak_neuro_curr <- cfa(weak_neuro_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak_neuro_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_neuro_curr <- '
# Define the latent factors
neuro_curr1 =~ NA*neuro_curr_par1_t1 + lambda1*neuro_curr_par1_t1 + lambda2*neuro_curr_par2_t1 + lambda3*neuro_curr_par3_t1
neuro_curr2 =~ NA*neuro_curr_par1_t2 + lambda1*neuro_curr_par1_t2 + lambda2*neuro_curr_par2_t2 + lambda3*neuro_curr_par3_t2

# Intercepts
neuro_curr_par1_t1 ~ i1*1
neuro_curr_par2_t1 ~ i2*1
neuro_curr_par3_t1 ~ i3*1

neuro_curr_par1_t2 ~ i1*1
neuro_curr_par2_t2 ~ i2*1
neuro_curr_par3_t2 ~ i3*1

# Unique Variances
neuro_curr_par1_t1 ~~ neuro_curr_par1_t1
neuro_curr_par2_t1 ~~ neuro_curr_par2_t1
neuro_curr_par3_t1 ~~ neuro_curr_par3_t1

neuro_curr_par1_t2 ~~ neuro_curr_par1_t2
neuro_curr_par2_t2 ~~ neuro_curr_par2_t2
neuro_curr_par3_t2 ~~ neuro_curr_par3_t2

# Latent Variable Means
neuro_curr1 ~ 0*1
neuro_curr2 ~ 1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
neuro_curr2 ~~ neuro_curr2
neuro_curr1 ~~ neuro_curr2
'
fit_strong_neuro_curr <- cfa(strong_neuro_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong_neuro_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_neuro_curr <- '
# Define the latent factors
neuro_curr1 =~ NA*neuro_curr_par1_t1 + lambda1*neuro_curr_par1_t1 + lambda2*neuro_curr_par2_t1 + lambda3*neuro_curr_par3_t1
neuro_curr2 =~ NA*neuro_curr_par1_t2 + lambda1*neuro_curr_par1_t2 + lambda2*neuro_curr_par2_t2 + lambda3*neuro_curr_par3_t2

# Intercepts
neuro_curr_par1_t1 ~ i1*1
neuro_curr_par2_t1 ~ i2*1
neuro_curr_par3_t1 ~ i3*1

neuro_curr_par1_t2 ~ i1*1
neuro_curr_par2_t2 ~ i2*1
neuro_curr_par3_t2 ~ i3*1

# Unique Variances
neuro_curr_par1_t1 ~~ u1*neuro_curr_par1_t1
neuro_curr_par2_t1 ~~ u2*neuro_curr_par2_t1
neuro_curr_par3_t1 ~~ u3*neuro_curr_par3_t1

neuro_curr_par1_t2 ~~ u1*neuro_curr_par1_t2
neuro_curr_par2_t2 ~~ u2*neuro_curr_par2_t2
neuro_curr_par3_t2 ~~ u3*neuro_curr_par3_t2

# Latent Variable Means
neuro_curr1 ~ 0*1
neuro_curr2 ~ 1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
neuro_curr2 ~~ neuro_curr2
neuro_curr1 ~~ neuro_curr2
'
fit_strict_neuro_curr <- cfa(strict_neuro_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict_neuro_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_neuro_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_neuro_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_neuro_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_neuro_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   674    19  173. 6934. 7020. 0.949 0.905 0.175 0.0265
2 weak         674    17  173. 6930. 7007. 0.950 0.925 0.156 0.0271
3 strong       674    15  175. 6928. 6996. 0.950 0.937 0.142 0.0268
4 strict       674    12  180. 6927. 6981. 0.949 0.949 0.128 0.0296
# chi-square difference test for nested models 
anova(fit_configural_neuro_curr, fit_weak_neuro_curr)

Chi-Squared Difference Test

                          Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_neuro_curr  8 6934.0 7019.8 173.01                         
fit_weak_neuro_curr       10 6930.3 7007.1 173.32    0.30625     0       2
                          Pr(>Chisq)
fit_configural_neuro_curr           
fit_weak_neuro_curr            0.858
anova(fit_weak_neuro_curr, fit_strong_neuro_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff     RMSEA Df diff
fit_weak_neuro_curr   10 6930.3 7007.1 173.32                             
fit_strong_neuro_curr 12 6928.4 6996.1 175.36     2.0421 0.0055866       2
                      Pr(>Chisq)
fit_weak_neuro_curr             
fit_strong_neuro_curr     0.3602
anova(fit_strong_neuro_curr, fit_strict_neuro_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_strong_neuro_curr 12 6928.4 6996.1 175.36                            
fit_strict_neuro_curr 15 6926.9 6981.1 179.87     4.5075 0.027305       3
                      Pr(>Chisq)
fit_strong_neuro_curr           
fit_strict_neuro_curr     0.2116

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.2.8 Neuroticism: ideal-personality (from T1 to T2)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*neuro_ideal_par1_t1 + lambda1*neuro_ideal_par1_t1 + neuro_ideal_par2_t1 + neuro_ideal_par3_t1
neuro_ideal2 =~ NA*neuro_ideal_par1_t2 + lambda1*neuro_ideal_par1_t2 + neuro_ideal_par2_t2 + neuro_ideal_par3_t2

# Intercepts
neuro_ideal_par1_t1 ~ i1*1
neuro_ideal_par2_t1 ~ 1
neuro_ideal_par3_t1 ~ 1

neuro_ideal_par1_t2 ~ i1*1
neuro_ideal_par2_t2 ~ 1
neuro_ideal_par3_t2 ~ 1

# Unique Variances
neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t1
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t1
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t1

neuro_ideal_par1_t2 ~~ neuro_ideal_par1_t2
neuro_ideal_par2_t2 ~~ neuro_ideal_par2_t2
neuro_ideal_par3_t2 ~~ neuro_ideal_par3_t2

# Latent Variable Means
neuro_ideal1 ~ 0*1
neuro_ideal2 ~ 1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
neuro_ideal2 ~~ neuro_ideal2
neuro_ideal1 ~~ neuro_ideal2
'
fit_configural_neuro_ideal <- cfa(configural_neuro_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural_neuro_ideal, fit.measures = TRUE)

# Weak invariance model
weak_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*neuro_ideal_par1_t1 + lambda1*neuro_ideal_par1_t1 + lambda2*neuro_ideal_par2_t1 + lambda3*neuro_ideal_par3_t1
neuro_ideal2 =~ NA*neuro_ideal_par1_t2 + lambda1*neuro_ideal_par1_t2 + lambda2*neuro_ideal_par2_t2 + lambda3*neuro_ideal_par3_t2

# Intercepts
neuro_ideal_par1_t1 ~ i1*1
neuro_ideal_par2_t1 ~ 1
neuro_ideal_par3_t1 ~ 1

neuro_ideal_par1_t2 ~ i1*1
neuro_ideal_par2_t2 ~ 1
neuro_ideal_par3_t2 ~ 1

# Unique Variances
neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t1
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t1
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t1

neuro_ideal_par1_t2 ~~ neuro_ideal_par1_t2
neuro_ideal_par2_t2 ~~ neuro_ideal_par2_t2
neuro_ideal_par3_t2 ~~ neuro_ideal_par3_t2

# Latent Variable Means
neuro_ideal1 ~ 0*1
neuro_ideal2 ~ 1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
neuro_ideal2 ~~ neuro_ideal2
neuro_ideal1 ~~ neuro_ideal2
'
fit_weak_neuro_ideal <- cfa(weak_neuro_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak_neuro_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*neuro_ideal_par1_t1 + lambda1*neuro_ideal_par1_t1 + lambda2*neuro_ideal_par2_t1 + lambda3*neuro_ideal_par3_t1
neuro_ideal2 =~ NA*neuro_ideal_par1_t2 + lambda1*neuro_ideal_par1_t2 + lambda2*neuro_ideal_par2_t2 + lambda3*neuro_ideal_par3_t2

# Intercepts
neuro_ideal_par1_t1 ~ i1*1
neuro_ideal_par2_t1 ~ i2*1
neuro_ideal_par3_t1 ~ i3*1

neuro_ideal_par1_t2 ~ i1*1
neuro_ideal_par2_t2 ~ i2*1
neuro_ideal_par3_t2 ~ i3*1

# Unique Variances
neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t1
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t1
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t1

neuro_ideal_par1_t2 ~~ neuro_ideal_par1_t2
neuro_ideal_par2_t2 ~~ neuro_ideal_par2_t2
neuro_ideal_par3_t2 ~~ neuro_ideal_par3_t2

# Latent Variable Means
neuro_ideal1 ~ 0*1
neuro_ideal2 ~ 1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
neuro_ideal2 ~~ neuro_ideal2
neuro_ideal1 ~~ neuro_ideal2
'
fit_strong_neuro_ideal <- cfa(strong_neuro_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong_neuro_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*neuro_ideal_par1_t1 + lambda1*neuro_ideal_par1_t1 + lambda2*neuro_ideal_par2_t1 + lambda3*neuro_ideal_par3_t1
neuro_ideal2 =~ NA*neuro_ideal_par1_t2 + lambda1*neuro_ideal_par1_t2 + lambda2*neuro_ideal_par2_t2 + lambda3*neuro_ideal_par3_t2

# Intercepts
neuro_ideal_par1_t1 ~ i1*1
neuro_ideal_par2_t1 ~ i2*1
neuro_ideal_par3_t1 ~ i3*1

neuro_ideal_par1_t2 ~ i1*1
neuro_ideal_par2_t2 ~ i2*1
neuro_ideal_par3_t2 ~ i3*1

# Unique Variances
neuro_ideal_par1_t1 ~~ u1*neuro_ideal_par1_t1
neuro_ideal_par2_t1 ~~ u2*neuro_ideal_par2_t1
neuro_ideal_par3_t1 ~~ u3*neuro_ideal_par3_t1

neuro_ideal_par1_t2 ~~ u1*neuro_ideal_par1_t2
neuro_ideal_par2_t2 ~~ u2*neuro_ideal_par2_t2
neuro_ideal_par3_t2 ~~ u3*neuro_ideal_par3_t2

# Latent Variable Means
neuro_ideal1 ~ 0*1
neuro_ideal2 ~ 1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
neuro_ideal2 ~~ neuro_ideal2
neuro_ideal1 ~~ neuro_ideal2
'
fit_strict_neuro_ideal <- cfa(strict_neuro_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict_neuro_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_neuro_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_neuro_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_neuro_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_neuro_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli  rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>  <dbl>
1 configural   674    19  15.5 5246. 5332. 0.995 0.991 0.0374 0.0129
2 weak         674    17  22.5 5249. 5326. 0.992 0.988 0.0431 0.0331
3 strong       674    15  24.8 5248. 5315. 0.992 0.989 0.0398 0.0369
4 strict       674    12  26.3 5243. 5297. 0.993 0.993 0.0335 0.0296
# chi-square difference test for nested models 
anova(fit_configural_neuro_ideal, fit_weak_neuro_ideal)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_configural_neuro_ideal  8 5246.4 5332.1 15.549                            
fit_weak_neuro_ideal       10 5249.4 5326.1 22.520     6.9709 0.060725       2
                           Pr(>Chisq)  
fit_configural_neuro_ideal             
fit_weak_neuro_ideal          0.03064 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(fit_weak_neuro_ideal, fit_strong_neuro_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC Chisq Chisq diff    RMSEA Df diff
fit_weak_neuro_ideal   10 5249.4 5326.1 22.52                            
fit_strong_neuro_ideal 12 5247.7 5315.4 24.81     2.2898 0.014663       2
                       Pr(>Chisq)
fit_weak_neuro_ideal             
fit_strong_neuro_ideal     0.3183
anova(fit_strong_neuro_ideal, fit_strict_neuro_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong_neuro_ideal 12 5247.7 5315.4 24.810                         
fit_strict_neuro_ideal 15 5243.2 5297.3 26.319     1.5092     0       3
                       Pr(>Chisq)
fit_strong_neuro_ideal           
fit_strict_neuro_ideal     0.6801

Very good model fit across all stages of measurement invariance. Chi^2 tests indicate that the test for weak measurement invariance is (barely) violated. Tests for strong and strict measurement invariance hold up, though. Probably ok to proceed, anyways.

4.2.9 Openness: current-personality (from T1 to T2)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*openn_curr_par1_t1 + lambda1*openn_curr_par1_t1 + openn_curr_par2_t1 + openn_curr_par3_t1
openn_curr2 =~ NA*openn_curr_par1_t2 + lambda1*openn_curr_par1_t2 + openn_curr_par2_t2 + openn_curr_par3_t2

# Intercepts
openn_curr_par1_t1 ~ i1*1
openn_curr_par2_t1 ~ 1
openn_curr_par3_t1 ~ 1

openn_curr_par1_t2 ~ i1*1
openn_curr_par2_t2 ~ 1
openn_curr_par3_t2 ~ 1

# Unique Variances
openn_curr_par1_t1 ~~ openn_curr_par1_t1
openn_curr_par2_t1 ~~ openn_curr_par2_t1
openn_curr_par3_t1 ~~ openn_curr_par3_t1

openn_curr_par1_t2 ~~ openn_curr_par1_t2
openn_curr_par2_t2 ~~ openn_curr_par2_t2
openn_curr_par3_t2 ~~ openn_curr_par3_t2

# Latent Variable Means
openn_curr1 ~ 0*1
openn_curr2 ~ 1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
openn_curr2 ~~ openn_curr2
openn_curr1 ~~ openn_curr2
'
fit_configural_openn_curr <- cfa(configural_openn_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural_openn_curr, fit.measures = TRUE)

# Weak invariance model
weak_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*openn_curr_par1_t1 + lambda1*openn_curr_par1_t1 + lambda2*openn_curr_par2_t1 + lambda3*openn_curr_par3_t1
openn_curr2 =~ NA*openn_curr_par1_t2 + lambda1*openn_curr_par1_t2 + lambda2*openn_curr_par2_t2 + lambda3*openn_curr_par3_t2

# Intercepts
openn_curr_par1_t1 ~ i1*1
openn_curr_par2_t1 ~ 1
openn_curr_par3_t1 ~ 1

openn_curr_par1_t2 ~ i1*1
openn_curr_par2_t2 ~ 1
openn_curr_par3_t2 ~ 1

# Unique Variances
openn_curr_par1_t1 ~~ openn_curr_par1_t1
openn_curr_par2_t1 ~~ openn_curr_par2_t1
openn_curr_par3_t1 ~~ openn_curr_par3_t1

openn_curr_par1_t2 ~~ openn_curr_par1_t2
openn_curr_par2_t2 ~~ openn_curr_par2_t2
openn_curr_par3_t2 ~~ openn_curr_par3_t2

# Latent Variable Means
openn_curr1 ~ 0*1
openn_curr2 ~ 1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
openn_curr2 ~~ openn_curr2
openn_curr1 ~~ openn_curr2
'
fit_weak_openn_curr <- cfa(weak_openn_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak_openn_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*openn_curr_par1_t1 + lambda1*openn_curr_par1_t1 + lambda2*openn_curr_par2_t1 + lambda3*openn_curr_par3_t1
openn_curr2 =~ NA*openn_curr_par1_t2 + lambda1*openn_curr_par1_t2 + lambda2*openn_curr_par2_t2 + lambda3*openn_curr_par3_t2

# Intercepts
openn_curr_par1_t1 ~ i1*1
openn_curr_par2_t1 ~ i2*1
openn_curr_par3_t1 ~ i3*1

openn_curr_par1_t2 ~ i1*1
openn_curr_par2_t2 ~ i2*1
openn_curr_par3_t2 ~ i3*1

# Unique Variances
openn_curr_par1_t1 ~~ openn_curr_par1_t1
openn_curr_par2_t1 ~~ openn_curr_par2_t1
openn_curr_par3_t1 ~~ openn_curr_par3_t1

openn_curr_par1_t2 ~~ openn_curr_par1_t2
openn_curr_par2_t2 ~~ openn_curr_par2_t2
openn_curr_par3_t2 ~~ openn_curr_par3_t2

# Latent Variable Means
openn_curr1 ~ 0*1
openn_curr2 ~ 1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
openn_curr2 ~~ openn_curr2
openn_curr1 ~~ openn_curr2
'
fit_strong_openn_curr <- cfa(strong_openn_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong_openn_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*openn_curr_par1_t1 + lambda1*openn_curr_par1_t1 + lambda2*openn_curr_par2_t1 + lambda3*openn_curr_par3_t1
openn_curr2 =~ NA*openn_curr_par1_t2 + lambda1*openn_curr_par1_t2 + lambda2*openn_curr_par2_t2 + lambda3*openn_curr_par3_t2

# Intercepts
openn_curr_par1_t1 ~ i1*1
openn_curr_par2_t1 ~ i2*1
openn_curr_par3_t1 ~ i3*1

openn_curr_par1_t2 ~ i1*1
openn_curr_par2_t2 ~ i2*1
openn_curr_par3_t2 ~ i3*1

# Unique Variances
openn_curr_par1_t1 ~~ u1*openn_curr_par1_t1
openn_curr_par2_t1 ~~ u2*openn_curr_par2_t1
openn_curr_par3_t1 ~~ u3*openn_curr_par3_t1

openn_curr_par1_t2 ~~ u1*openn_curr_par1_t2
openn_curr_par2_t2 ~~ u2*openn_curr_par2_t2
openn_curr_par3_t2 ~~ u3*openn_curr_par3_t2

# Latent Variable Means
openn_curr1 ~ 0*1
openn_curr2 ~ 1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
openn_curr2 ~~ openn_curr2
openn_curr1 ~~ openn_curr2
'
fit_strict_openn_curr <- cfa(strict_openn_curr, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict_openn_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_openn_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_openn_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_openn_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_openn_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   674    19  155. 6334. 6420. 0.935 0.878 0.165 0.0370
2 weak         674    17  156. 6330. 6407. 0.936 0.903 0.147 0.0382
3 strong       674    15  160. 6330. 6398. 0.935 0.918 0.135 0.0396
4 strict       674    12  166. 6330. 6384. 0.933 0.933 0.122 0.0421
# chi-square difference test for nested models 
anova(fit_configural_openn_curr, fit_weak_openn_curr)

Chi-Squared Difference Test

                          Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_openn_curr  8 6333.8 6419.6 155.48                         
fit_weak_openn_curr       10 6330.1 6406.8 155.75    0.26746     0       2
                          Pr(>Chisq)
fit_configural_openn_curr           
fit_weak_openn_curr           0.8748
anova(fit_weak_openn_curr, fit_strong_openn_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_weak_openn_curr   10 6330.1 6406.8 155.75                            
fit_strong_openn_curr 12 6330.0 6397.7 159.66      3.914 0.037681       2
                      Pr(>Chisq)
fit_weak_openn_curr             
fit_strong_openn_curr     0.1413
anova(fit_strong_openn_curr, fit_strict_openn_curr)

Chi-Squared Difference Test

                      Df  AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_strong_openn_curr 12 6330 6397.7 159.66                            
fit_strict_openn_curr 15 6330 6384.2 165.68     6.0204 0.038649       3
                      Pr(>Chisq)
fit_strong_openn_curr           
fit_strict_openn_curr     0.1106

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.2.10 Openness: ideal-personality (from T1 to T2)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*openn_ideal_par1_t1 + lambda1*openn_ideal_par1_t1 + openn_ideal_par2_t1 + openn_ideal_par3_t1
openn_ideal2 =~ NA*openn_ideal_par1_t2 + lambda1*openn_ideal_par1_t2 + openn_ideal_par2_t2 + openn_ideal_par3_t2

# Intercepts
openn_ideal_par1_t1 ~ i1*1
openn_ideal_par2_t1 ~ 1
openn_ideal_par3_t1 ~ 1

openn_ideal_par1_t2 ~ i1*1
openn_ideal_par2_t2 ~ 1
openn_ideal_par3_t2 ~ 1

# Unique Variances
openn_ideal_par1_t1 ~~ openn_ideal_par1_t1
openn_ideal_par2_t1 ~~ openn_ideal_par2_t1
openn_ideal_par3_t1 ~~ openn_ideal_par3_t1

openn_ideal_par1_t2 ~~ openn_ideal_par1_t2
openn_ideal_par2_t2 ~~ openn_ideal_par2_t2
openn_ideal_par3_t2 ~~ openn_ideal_par3_t2

# Latent Variable Means
openn_ideal1 ~ 0*1
openn_ideal2 ~ 1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
openn_ideal2 ~~ openn_ideal2
openn_ideal1 ~~ openn_ideal2
'
fit_configural_openn_ideal <- cfa(configural_openn_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural_openn_ideal, fit.measures = TRUE)

# Weak invariance model
weak_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*openn_ideal_par1_t1 + lambda1*openn_ideal_par1_t1 + lambda2*openn_ideal_par2_t1 + lambda3*openn_ideal_par3_t1
openn_ideal2 =~ NA*openn_ideal_par1_t2 + lambda1*openn_ideal_par1_t2 + lambda2*openn_ideal_par2_t2 + lambda3*openn_ideal_par3_t2

# Intercepts
openn_ideal_par1_t1 ~ i1*1
openn_ideal_par2_t1 ~ 1
openn_ideal_par3_t1 ~ 1

openn_ideal_par1_t2 ~ i1*1
openn_ideal_par2_t2 ~ 1
openn_ideal_par3_t2 ~ 1

# Unique Variances
openn_ideal_par1_t1 ~~ openn_ideal_par1_t1
openn_ideal_par2_t1 ~~ openn_ideal_par2_t1
openn_ideal_par3_t1 ~~ openn_ideal_par3_t1

openn_ideal_par1_t2 ~~ openn_ideal_par1_t2
openn_ideal_par2_t2 ~~ openn_ideal_par2_t2
openn_ideal_par3_t2 ~~ openn_ideal_par3_t2

# Latent Variable Means
openn_ideal1 ~ 0*1
openn_ideal2 ~ 1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
openn_ideal2 ~~ openn_ideal2
openn_ideal1 ~~ openn_ideal2
'
fit_weak_openn_ideal <- cfa(weak_openn_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak_openn_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*openn_ideal_par1_t1 + lambda1*openn_ideal_par1_t1 + lambda2*openn_ideal_par2_t1 + lambda3*openn_ideal_par3_t1
openn_ideal2 =~ NA*openn_ideal_par1_t2 + lambda1*openn_ideal_par1_t2 + lambda2*openn_ideal_par2_t2 + lambda3*openn_ideal_par3_t2

# Intercepts
openn_ideal_par1_t1 ~ i1*1
openn_ideal_par2_t1 ~ i2*1
openn_ideal_par3_t1 ~ i3*1

openn_ideal_par1_t2 ~ i1*1
openn_ideal_par2_t2 ~ i2*1
openn_ideal_par3_t2 ~ i3*1

# Unique Variances
openn_ideal_par1_t1 ~~ openn_ideal_par1_t1
openn_ideal_par2_t1 ~~ openn_ideal_par2_t1
openn_ideal_par3_t1 ~~ openn_ideal_par3_t1

openn_ideal_par1_t2 ~~ openn_ideal_par1_t2
openn_ideal_par2_t2 ~~ openn_ideal_par2_t2
openn_ideal_par3_t2 ~~ openn_ideal_par3_t2

# Latent Variable Means
openn_ideal1 ~ 0*1
openn_ideal2 ~ 1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
openn_ideal2 ~~ openn_ideal2
openn_ideal1 ~~ openn_ideal2
'
fit_strong_openn_ideal <- cfa(strong_openn_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong_openn_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*openn_ideal_par1_t1 + lambda1*openn_ideal_par1_t1 + lambda2*openn_ideal_par2_t1 + lambda3*openn_ideal_par3_t1
openn_ideal2 =~ NA*openn_ideal_par1_t2 + lambda1*openn_ideal_par1_t2 + lambda2*openn_ideal_par2_t2 + lambda3*openn_ideal_par3_t2

# Intercepts
openn_ideal_par1_t1 ~ i1*1
openn_ideal_par2_t1 ~ i2*1
openn_ideal_par3_t1 ~ i3*1

openn_ideal_par1_t2 ~ i1*1
openn_ideal_par2_t2 ~ i2*1
openn_ideal_par3_t2 ~ i3*1

# Unique Variances
openn_ideal_par1_t1 ~~ u1*openn_ideal_par1_t1
openn_ideal_par2_t1 ~~ u2*openn_ideal_par2_t1
openn_ideal_par3_t1 ~~ u3*openn_ideal_par3_t1

openn_ideal_par1_t2 ~~ u1*openn_ideal_par1_t2
openn_ideal_par2_t2 ~~ u2*openn_ideal_par2_t2
openn_ideal_par3_t2 ~~ u3*openn_ideal_par3_t2

# Latent Variable Means
openn_ideal1 ~ 0*1
openn_ideal2 ~ 1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
openn_ideal2 ~~ openn_ideal2
openn_ideal1 ~~ openn_ideal2
'
fit_strict_openn_ideal <- cfa(strict_openn_ideal, data = df_sbsa2_wide_pers %>% filter(rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict_openn_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_openn_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_openn_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_openn_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_openn_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   674    19  162. 6090. 6176. 0.886 0.786 0.169 0.0648
2 weak         674    17  168. 6092. 6169. 0.883 0.824 0.153 0.0844
3 strong       674    15  173. 6093. 6161. 0.880 0.851 0.141 0.0808
4 strict       674    12  182. 6096. 6150. 0.876 0.876 0.128 0.0711
# chi-square difference test for nested models 
anova(fit_configural_openn_ideal, fit_weak_openn_ideal)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_configural_openn_ideal  8 6090.1 6175.9 162.04                            
fit_weak_openn_ideal       10 6092.1 6168.8 168.04     5.9987 0.054465       2
                           Pr(>Chisq)  
fit_configural_openn_ideal             
fit_weak_openn_ideal          0.04982 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(fit_weak_openn_ideal, fit_strong_openn_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_weak_openn_ideal   10 6092.1 6168.8 168.04                            
fit_strong_openn_ideal 12 6093.1 6160.8 173.05     5.0096 0.047251       2
                       Pr(>Chisq)  
fit_weak_openn_ideal               
fit_strong_openn_ideal    0.08169 .
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(fit_strong_openn_ideal, fit_strict_openn_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_strong_openn_ideal 12 6093.1 6160.8 173.05                            
fit_strict_openn_ideal 15 6095.8 6150.0 181.78     8.7264 0.053217       3
                       Pr(>Chisq)  
fit_strong_openn_ideal             
fit_strict_openn_ideal    0.03316 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Model fit not satisfactory across all stages of measurement invariance. Chi^2 tests indicate that the test for weak measurement invariance is just about violated at (very close to .05, though). Otherwise, strong measurement invariance is given. Probably ok to proceed!

4.3 Big Five: from T2 to T3

Testing for measurement invariance of the latent BFI-2 traits across time, from T2 to T3.

4.3.1 Extraversion: current-personality (from T2 to T3)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural2_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*extra_curr_par1_t2 + lambda1*extra_curr_par1_t2 + extra_curr_par2_t2 + extra_curr_par3_t2
extra_curr2 =~ NA*extra_curr_par1_t3 + lambda1*extra_curr_par1_t3 + extra_curr_par2_t3 + extra_curr_par3_t3

# Intercepts
extra_curr_par1_t2 ~ i1*1
extra_curr_par2_t2 ~ 1
extra_curr_par3_t2 ~ 1

extra_curr_par1_t3 ~ i1*1
extra_curr_par2_t3 ~ 1
extra_curr_par3_t3 ~ 1

# Unique Variances
extra_curr_par1_t2 ~~ extra_curr_par1_t2
extra_curr_par2_t2 ~~ extra_curr_par2_t2
extra_curr_par3_t2 ~~ extra_curr_par3_t2

extra_curr_par1_t3 ~~ extra_curr_par1_t3
extra_curr_par2_t3 ~~ extra_curr_par2_t3
extra_curr_par3_t3 ~~ extra_curr_par3_t3

# Latent Variable Means
extra_curr1 ~ 0*1
extra_curr2 ~ 1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
extra_curr2 ~~ extra_curr2
extra_curr1 ~~ extra_curr2
'
fit_configural2_extra_curr <- cfa(configural2_extra_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural2_extra_curr, fit.measures = TRUE)

# Weak invariance model
weak2_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*extra_curr_par1_t2 + lambda1*extra_curr_par1_t2 + lambda2*extra_curr_par2_t2 + lambda3*extra_curr_par3_t2
extra_curr2 =~ NA*extra_curr_par1_t3 + lambda1*extra_curr_par1_t3 + lambda2*extra_curr_par2_t3 + lambda3*extra_curr_par3_t3

# Intercepts
extra_curr_par1_t2 ~ i1*1
extra_curr_par2_t2 ~ 1
extra_curr_par3_t2 ~ 1

extra_curr_par1_t3 ~ i1*1
extra_curr_par2_t3 ~ 1
extra_curr_par3_t3 ~ 1

# Unique Variances
extra_curr_par1_t2 ~~ extra_curr_par1_t2
extra_curr_par2_t2 ~~ extra_curr_par2_t2
extra_curr_par3_t2 ~~ extra_curr_par3_t2

extra_curr_par1_t3 ~~ extra_curr_par1_t3
extra_curr_par2_t3 ~~ extra_curr_par2_t3
extra_curr_par3_t3 ~~ extra_curr_par3_t3

# Latent Variable Means
extra_curr1 ~ 0*1
extra_curr2 ~ 1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
extra_curr2 ~~ extra_curr2
extra_curr1 ~~ extra_curr2
'
fit_weak2_extra_curr <- cfa(weak2_extra_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak2_extra_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong2_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*extra_curr_par1_t2 + lambda1*extra_curr_par1_t2 + lambda2*extra_curr_par2_t2 + lambda3*extra_curr_par3_t2
extra_curr2 =~ NA*extra_curr_par1_t3 + lambda1*extra_curr_par1_t3 + lambda2*extra_curr_par2_t3 + lambda3*extra_curr_par3_t3

# Intercepts
extra_curr_par1_t2 ~ i1*1
extra_curr_par2_t2 ~ i2*1
extra_curr_par3_t2 ~ i3*1

extra_curr_par1_t3 ~ i1*1
extra_curr_par2_t3 ~ i2*1
extra_curr_par3_t3 ~ i3*1

# Unique Variances
extra_curr_par1_t2 ~~ extra_curr_par1_t2
extra_curr_par2_t2 ~~ extra_curr_par2_t2
extra_curr_par3_t2 ~~ extra_curr_par3_t2

extra_curr_par1_t3 ~~ extra_curr_par1_t3
extra_curr_par2_t3 ~~ extra_curr_par2_t3
extra_curr_par3_t3 ~~ extra_curr_par3_t3

# Latent Variable Means
extra_curr1 ~ 0*1
extra_curr2 ~ 1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
extra_curr2 ~~ extra_curr2
extra_curr1 ~~ extra_curr2
'
fit_strong2_extra_curr <- cfa(strong2_extra_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong2_extra_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict2_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*extra_curr_par1_t2 + lambda1*extra_curr_par1_t2 + lambda2*extra_curr_par2_t2 + lambda3*extra_curr_par3_t2
extra_curr2 =~ NA*extra_curr_par1_t3 + lambda1*extra_curr_par1_t3 + lambda2*extra_curr_par2_t3 + lambda3*extra_curr_par3_t3

# Intercepts
extra_curr_par1_t2 ~ i1*1
extra_curr_par2_t2 ~ i2*1
extra_curr_par3_t2 ~ i3*1

extra_curr_par1_t3 ~ i1*1
extra_curr_par2_t3 ~ i2*1
extra_curr_par3_t3 ~ i3*1

# Unique Variances
extra_curr_par1_t2 ~~ u1*extra_curr_par1_t2
extra_curr_par2_t2 ~~ u2*extra_curr_par2_t2
extra_curr_par3_t2 ~~ u3*extra_curr_par3_t2

extra_curr_par1_t3 ~~ u1*extra_curr_par1_t3
extra_curr_par2_t3 ~~ u2*extra_curr_par2_t3
extra_curr_par3_t3 ~~ u3*extra_curr_par3_t3

# Latent Variable Means
extra_curr1 ~ 0*1
extra_curr2 ~ 1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
extra_curr2 ~~ extra_curr2
extra_curr1 ~~ extra_curr2
'
fit_strict2_extra_curr <- cfa(strict2_extra_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict2_extra_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural2_extra_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak2_extra_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong2_extra_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict2_extra_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   577    19  398. 6335. 6418. 0.808 0.640 0.291 0.0696
2 weak         577    17  399. 6333. 6407. 0.808 0.713 0.260 0.0747
3 strong       577    15  402. 6332. 6397. 0.808 0.760 0.237 0.0726
4 strict       577    12  403. 6327. 6379. 0.809 0.809 0.212 0.0731
# chi-square difference test for nested models 
anova(fit_configural2_extra_curr, fit_weak2_extra_curr)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural2_extra_curr  8 6335.3 6418.1 397.63                         
fit_weak2_extra_curr       10 6333.0 6407.1 399.35     1.7174     0       2
                           Pr(>Chisq)
fit_configural2_extra_curr           
fit_weak2_extra_curr           0.4237
anova(fit_weak2_extra_curr, fit_strong2_extra_curr)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_weak2_extra_curr   10 6333.0 6407.1 399.35                            
fit_strong2_extra_curr 12 6331.8 6397.2 402.16     2.8056 0.026421       2
                       Pr(>Chisq)
fit_weak2_extra_curr             
fit_strong2_extra_curr     0.2459
anova(fit_strong2_extra_curr, fit_strict2_extra_curr)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong2_extra_curr 12 6331.8 6397.2 402.16                         
fit_strict2_extra_curr 15 6326.7 6379.0 403.07    0.91245     0       3
                       Pr(>Chisq)
fit_strong2_extra_curr           
fit_strict2_extra_curr     0.8224

Model fit still not satisfactory. Chi^2 tests indicate that strict measurement invariance is given.

4.3.2 Extraversion: ideal-personality (from T2 to T3)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural2_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*extra_ideal_par1_t2 + lambda1*extra_ideal_par1_t2 + extra_ideal_par2_t2 + extra_ideal_par3_t2
extra_ideal2 =~ NA*extra_ideal_par1_t3 + lambda1*extra_ideal_par1_t3 + extra_ideal_par2_t3 + extra_ideal_par3_t3

# Intercepts
extra_ideal_par1_t2 ~ i1*1
extra_ideal_par2_t2 ~ 1
extra_ideal_par3_t2 ~ 1

extra_ideal_par1_t3 ~ i1*1
extra_ideal_par2_t3 ~ 1
extra_ideal_par3_t3 ~ 1

# Unique Variances
extra_ideal_par1_t2 ~~ extra_ideal_par1_t2
extra_ideal_par2_t2 ~~ extra_ideal_par2_t2
extra_ideal_par3_t2 ~~ extra_ideal_par3_t2

extra_ideal_par1_t3 ~~ extra_ideal_par1_t3
extra_ideal_par2_t3 ~~ extra_ideal_par2_t3
extra_ideal_par3_t3 ~~ extra_ideal_par3_t3

# Latent Variable Means
extra_ideal1 ~ 0*1
extra_ideal2 ~ 1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
extra_ideal2 ~~ extra_ideal2
extra_ideal1 ~~ extra_ideal2
'
fit_configural2_extra_ideal <- cfa(configural2_extra_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural2_extra_ideal, fit.measures = TRUE)

# Weak invariance model
weak2_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*extra_ideal_par1_t2 + lambda1*extra_ideal_par1_t2 + lambda2*extra_ideal_par2_t2 + lambda3*extra_ideal_par3_t2
extra_ideal2 =~ NA*extra_ideal_par1_t3 + lambda1*extra_ideal_par1_t3 + lambda2*extra_ideal_par2_t3 + lambda3*extra_ideal_par3_t3

# Intercepts
extra_ideal_par1_t2 ~ i1*1
extra_ideal_par2_t2 ~ 1
extra_ideal_par3_t2 ~ 1

extra_ideal_par1_t3 ~ i1*1
extra_ideal_par2_t3 ~ 1
extra_ideal_par3_t3 ~ 1

# Unique Variances
extra_ideal_par1_t2 ~~ extra_ideal_par1_t2
extra_ideal_par2_t2 ~~ extra_ideal_par2_t2
extra_ideal_par3_t2 ~~ extra_ideal_par3_t2

extra_ideal_par1_t3 ~~ extra_ideal_par1_t3
extra_ideal_par2_t3 ~~ extra_ideal_par2_t3
extra_ideal_par3_t3 ~~ extra_ideal_par3_t3

# Latent Variable Means
extra_ideal1 ~ 0*1
extra_ideal2 ~ 1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
extra_ideal2 ~~ extra_ideal2
extra_ideal1 ~~ extra_ideal2
'
fit_weak2_extra_ideal <- cfa(weak2_extra_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak2_extra_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong2_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*extra_ideal_par1_t2 + lambda1*extra_ideal_par1_t2 + lambda2*extra_ideal_par2_t2 + lambda3*extra_ideal_par3_t2
extra_ideal2 =~ NA*extra_ideal_par1_t3 + lambda1*extra_ideal_par1_t3 + lambda2*extra_ideal_par2_t3 + lambda3*extra_ideal_par3_t3

# Intercepts
extra_ideal_par1_t2 ~ i1*1
extra_ideal_par2_t2 ~ i2*1
extra_ideal_par3_t2 ~ i3*1

extra_ideal_par1_t3 ~ i1*1
extra_ideal_par2_t3 ~ i2*1
extra_ideal_par3_t3 ~ i3*1

# Unique Variances
extra_ideal_par1_t2 ~~ extra_ideal_par1_t2
extra_ideal_par2_t2 ~~ extra_ideal_par2_t2
extra_ideal_par3_t2 ~~ extra_ideal_par3_t2

extra_ideal_par1_t3 ~~ extra_ideal_par1_t3
extra_ideal_par2_t3 ~~ extra_ideal_par2_t3
extra_ideal_par3_t3 ~~ extra_ideal_par3_t3

# Latent Variable Means
extra_ideal1 ~ 0*1
extra_ideal2 ~ 1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
extra_ideal2 ~~ extra_ideal2
extra_ideal1 ~~ extra_ideal2
'
fit_strong2_extra_ideal <- cfa(strong2_extra_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong2_extra_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict2_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*extra_ideal_par1_t2 + lambda1*extra_ideal_par1_t2 + lambda2*extra_ideal_par2_t2 + lambda3*extra_ideal_par3_t2
extra_ideal2 =~ NA*extra_ideal_par1_t3 + lambda1*extra_ideal_par1_t3 + lambda2*extra_ideal_par2_t3 + lambda3*extra_ideal_par3_t3

# Intercepts
extra_ideal_par1_t2 ~ i1*1
extra_ideal_par2_t2 ~ i2*1
extra_ideal_par3_t2 ~ i3*1

extra_ideal_par1_t3 ~ i1*1
extra_ideal_par2_t3 ~ i2*1
extra_ideal_par3_t3 ~ i3*1

# Unique Variances
extra_ideal_par1_t2 ~~ u1*extra_ideal_par1_t2
extra_ideal_par2_t2 ~~ u2*extra_ideal_par2_t2
extra_ideal_par3_t2 ~~ u3*extra_ideal_par3_t2

extra_ideal_par1_t3 ~~ u1*extra_ideal_par1_t3
extra_ideal_par2_t3 ~~ u2*extra_ideal_par2_t3
extra_ideal_par3_t3 ~~ u3*extra_ideal_par3_t3

# Latent Variable Means
extra_ideal1 ~ 0*1
extra_ideal2 ~ 1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
extra_ideal2 ~~ extra_ideal2
extra_ideal1 ~~ extra_ideal2
'
fit_strict2_extra_ideal <- cfa(strict2_extra_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict2_extra_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural2_extra_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak2_extra_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong2_extra_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict2_extra_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   577    19  169. 5357. 5440. 0.844 0.707 0.187 0.0617
2 weak         577    17  170. 5353. 5427. 0.845 0.768 0.166 0.0639
3 strong       577    15  170. 5350. 5415. 0.847 0.808 0.151 0.0637
4 strict       577    12  172. 5346. 5398. 0.847 0.847 0.135 0.0675
# chi-square difference test for nested models 
anova(fit_configural2_extra_ideal, fit_weak2_extra_ideal)

Chi-Squared Difference Test

                            Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural2_extra_ideal  8 5356.9 5439.7 169.37                         
fit_weak2_extra_ideal       10 5353.3 5427.4 169.75    0.38629     0       2
                            Pr(>Chisq)
fit_configural2_extra_ideal           
fit_weak2_extra_ideal           0.8244
anova(fit_weak2_extra_ideal, fit_strong2_extra_ideal)

Chi-Squared Difference Test

                        Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak2_extra_ideal   10 5353.3 5427.4 169.75                         
fit_strong2_extra_ideal 12 5349.9 5415.2 170.34     0.5878     0       2
                        Pr(>Chisq)
fit_weak2_extra_ideal             
fit_strong2_extra_ideal     0.7454
anova(fit_strong2_extra_ideal, fit_strict2_extra_ideal)

Chi-Squared Difference Test

                        Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong2_extra_ideal 12 5349.9 5415.2 170.34                         
fit_strict2_extra_ideal 15 5345.9 5398.2 172.39     2.0524     0       3
                        Pr(>Chisq)
fit_strong2_extra_ideal           
fit_strict2_extra_ideal     0.5616

Model fit still not satisfactory. Chi^2 tests indicate that strict measurement invariance is given.

4.3.3 Agreeableness: current-personality (from T2 to T3)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural2_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*agree_curr_par1_t2 + lambda1*agree_curr_par1_t2 + agree_curr_par2_t2 + agree_curr_par3_t2
agree_curr2 =~ NA*agree_curr_par1_t3 + lambda1*agree_curr_par1_t3 + agree_curr_par2_t3 + agree_curr_par3_t3

# Intercepts
agree_curr_par1_t2 ~ i1*1
agree_curr_par2_t2 ~ 1
agree_curr_par3_t2 ~ 1

agree_curr_par1_t3 ~ i1*1
agree_curr_par2_t3 ~ 1
agree_curr_par3_t3 ~ 1

# Unique Variances
agree_curr_par1_t2 ~~ agree_curr_par1_t2
agree_curr_par2_t2 ~~ agree_curr_par2_t2
agree_curr_par3_t2 ~~ agree_curr_par3_t2

agree_curr_par1_t3 ~~ agree_curr_par1_t3
agree_curr_par2_t3 ~~ agree_curr_par2_t3
agree_curr_par3_t3 ~~ agree_curr_par3_t3

# Latent Variable Means
agree_curr1 ~ 0*1
agree_curr2 ~ 1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
agree_curr2 ~~ agree_curr2
agree_curr1 ~~ agree_curr2
'
fit_configural2_agree_curr <- cfa(configural2_agree_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural2_agree_curr, fit.measures = TRUE)

# Weak invariance model
weak2_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*agree_curr_par1_t2 + lambda1*agree_curr_par1_t2 + lambda2*agree_curr_par2_t2 + lambda3*agree_curr_par3_t2
agree_curr2 =~ NA*agree_curr_par1_t3 + lambda1*agree_curr_par1_t3 + lambda2*agree_curr_par2_t3 + lambda3*agree_curr_par3_t3

# Intercepts
agree_curr_par1_t2 ~ i1*1
agree_curr_par2_t2 ~ 1
agree_curr_par3_t2 ~ 1

agree_curr_par1_t3 ~ i1*1
agree_curr_par2_t3 ~ 1
agree_curr_par3_t3 ~ 1

# Unique Variances
agree_curr_par1_t2 ~~ agree_curr_par1_t2
agree_curr_par2_t2 ~~ agree_curr_par2_t2
agree_curr_par3_t2 ~~ agree_curr_par3_t2

agree_curr_par1_t3 ~~ agree_curr_par1_t3
agree_curr_par2_t3 ~~ agree_curr_par2_t3
agree_curr_par3_t3 ~~ agree_curr_par3_t3

# Latent Variable Means
agree_curr1 ~ 0*1
agree_curr2 ~ 1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
agree_curr2 ~~ agree_curr2
agree_curr1 ~~ agree_curr2
'
fit_weak2_agree_curr <- cfa(weak2_agree_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak2_agree_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong2_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*agree_curr_par1_t2 + lambda1*agree_curr_par1_t2 + lambda2*agree_curr_par2_t2 + lambda3*agree_curr_par3_t2
agree_curr2 =~ NA*agree_curr_par1_t3 + lambda1*agree_curr_par1_t3 + lambda2*agree_curr_par2_t3 + lambda3*agree_curr_par3_t3

# Intercepts
agree_curr_par1_t2 ~ i1*1
agree_curr_par2_t2 ~ i2*1
agree_curr_par3_t2 ~ i3*1

agree_curr_par1_t3 ~ i1*1
agree_curr_par2_t3 ~ i2*1
agree_curr_par3_t3 ~ i3*1

# Unique Variances
agree_curr_par1_t2 ~~ agree_curr_par1_t2
agree_curr_par2_t2 ~~ agree_curr_par2_t2
agree_curr_par3_t2 ~~ agree_curr_par3_t2

agree_curr_par1_t3 ~~ agree_curr_par1_t3
agree_curr_par2_t3 ~~ agree_curr_par2_t3
agree_curr_par3_t3 ~~ agree_curr_par3_t3

# Latent Variable Means
agree_curr1 ~ 0*1
agree_curr2 ~ 1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
agree_curr2 ~~ agree_curr2
agree_curr1 ~~ agree_curr2
'
fit_strong2_agree_curr <- cfa(strong2_agree_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong2_agree_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict2_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*agree_curr_par1_t2 + lambda1*agree_curr_par1_t2 + lambda2*agree_curr_par2_t2 + lambda3*agree_curr_par3_t2
agree_curr2 =~ NA*agree_curr_par1_t3 + lambda1*agree_curr_par1_t3 + lambda2*agree_curr_par2_t3 + lambda3*agree_curr_par3_t3

# Intercepts
agree_curr_par1_t2 ~ i1*1
agree_curr_par2_t2 ~ i2*1
agree_curr_par3_t2 ~ i3*1

agree_curr_par1_t3 ~ i1*1
agree_curr_par2_t3 ~ i2*1
agree_curr_par3_t3 ~ i3*1

# Unique Variances
agree_curr_par1_t2 ~~ u1*agree_curr_par1_t2
agree_curr_par2_t2 ~~ u2*agree_curr_par2_t2
agree_curr_par3_t2 ~~ u3*agree_curr_par3_t2

agree_curr_par1_t3 ~~ u1*agree_curr_par1_t3
agree_curr_par2_t3 ~~ u2*agree_curr_par2_t3
agree_curr_par3_t3 ~~ u3*agree_curr_par3_t3

# Latent Variable Means
agree_curr1 ~ 0*1
agree_curr2 ~ 1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
agree_curr2 ~~ agree_curr2
agree_curr1 ~~ agree_curr2
'
fit_strict2_agree_curr <- cfa(strict2_agree_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict2_agree_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural2_agree_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak2_agree_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong2_agree_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict2_agree_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   577    19  239. 5005. 5088. 0.839 0.698 0.224 0.0754
2 weak         577    17  240. 5002. 5076. 0.840 0.760 0.200 0.0764
3 strong       577    15  240. 4998. 5063. 0.841 0.802 0.181 0.0767
4 strict       577    12  242. 4994. 5046. 0.842 0.842 0.162 0.0822
# chi-square difference test for nested models 
anova(fit_configural2_agree_curr, fit_weak2_agree_curr)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural2_agree_curr  8 5005.3 5088.1 239.49                         
fit_weak2_agree_curr       10 5001.6 5075.7 239.74    0.24587     0       2
                           Pr(>Chisq)
fit_configural2_agree_curr           
fit_weak2_agree_curr           0.8843
anova(fit_weak2_agree_curr, fit_strong2_agree_curr)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak2_agree_curr   10 5001.6 5075.7 239.74                         
fit_strong2_agree_curr 12 4997.7 5063.1 239.83   0.093468     0       2
                       Pr(>Chisq)
fit_weak2_agree_curr             
fit_strong2_agree_curr     0.9543
anova(fit_strong2_agree_curr, fit_strict2_agree_curr)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong2_agree_curr 12 4997.7 5063.1 239.83                         
fit_strict2_agree_curr 15 4993.8 5046.1 241.97     2.1344     0       3
                       Pr(>Chisq)
fit_strong2_agree_curr           
fit_strict2_agree_curr      0.545

Model fit still not satisfactory. Chi^2 tests indicate that strict measurement invariance is given.

4.3.4 Agreeableness: ideal-personality (from T2 to T3)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural2_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*agree_ideal_par1_t2 + lambda1*agree_ideal_par1_t2 + agree_ideal_par2_t2 + agree_ideal_par3_t2
agree_ideal2 =~ NA*agree_ideal_par1_t3 + lambda1*agree_ideal_par1_t3 + agree_ideal_par2_t3 + agree_ideal_par3_t3

# Intercepts
agree_ideal_par1_t2 ~ i1*1
agree_ideal_par2_t2 ~ 1
agree_ideal_par3_t2 ~ 1

agree_ideal_par1_t3 ~ i1*1
agree_ideal_par2_t3 ~ 1
agree_ideal_par3_t3 ~ 1

# Unique Variances
agree_ideal_par1_t2 ~~ agree_ideal_par1_t2
agree_ideal_par2_t2 ~~ agree_ideal_par2_t2
agree_ideal_par3_t2 ~~ agree_ideal_par3_t2

agree_ideal_par1_t3 ~~ agree_ideal_par1_t3
agree_ideal_par2_t3 ~~ agree_ideal_par2_t3
agree_ideal_par3_t3 ~~ agree_ideal_par3_t3

# Latent Variable Means
agree_ideal1 ~ 0*1
agree_ideal2 ~ 1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
agree_ideal2 ~~ agree_ideal2
agree_ideal1 ~~ agree_ideal2
'
fit_configural2_agree_ideal <- cfa(configural2_agree_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural2_agree_ideal, fit.measures = TRUE)

# Weak invariance model
weak2_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*agree_ideal_par1_t2 + lambda1*agree_ideal_par1_t2 + lambda2*agree_ideal_par2_t2 + lambda3*agree_ideal_par3_t2
agree_ideal2 =~ NA*agree_ideal_par1_t3 + lambda1*agree_ideal_par1_t3 + lambda2*agree_ideal_par2_t3 + lambda3*agree_ideal_par3_t3

# Intercepts
agree_ideal_par1_t2 ~ i1*1
agree_ideal_par2_t2 ~ 1
agree_ideal_par3_t2 ~ 1

agree_ideal_par1_t3 ~ i1*1
agree_ideal_par2_t3 ~ 1
agree_ideal_par3_t3 ~ 1

# Unique Variances
agree_ideal_par1_t2 ~~ agree_ideal_par1_t2
agree_ideal_par2_t2 ~~ agree_ideal_par2_t2
agree_ideal_par3_t2 ~~ agree_ideal_par3_t2

agree_ideal_par1_t3 ~~ agree_ideal_par1_t3
agree_ideal_par2_t3 ~~ agree_ideal_par2_t3
agree_ideal_par3_t3 ~~ agree_ideal_par3_t3

# Latent Variable Means
agree_ideal1 ~ 0*1
agree_ideal2 ~ 1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
agree_ideal2 ~~ agree_ideal2
agree_ideal1 ~~ agree_ideal2
'
fit_weak2_agree_ideal <- cfa(weak2_agree_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak2_agree_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong2_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*agree_ideal_par1_t2 + lambda1*agree_ideal_par1_t2 + lambda2*agree_ideal_par2_t2 + lambda3*agree_ideal_par3_t2
agree_ideal2 =~ NA*agree_ideal_par1_t3 + lambda1*agree_ideal_par1_t3 + lambda2*agree_ideal_par2_t3 + lambda3*agree_ideal_par3_t3

# Intercepts
agree_ideal_par1_t2 ~ i1*1
agree_ideal_par2_t2 ~ i2*1
agree_ideal_par3_t2 ~ i3*1

agree_ideal_par1_t3 ~ i1*1
agree_ideal_par2_t3 ~ i2*1
agree_ideal_par3_t3 ~ i3*1

# Unique Variances
agree_ideal_par1_t2 ~~ agree_ideal_par1_t2
agree_ideal_par2_t2 ~~ agree_ideal_par2_t2
agree_ideal_par3_t2 ~~ agree_ideal_par3_t2

agree_ideal_par1_t3 ~~ agree_ideal_par1_t3
agree_ideal_par2_t3 ~~ agree_ideal_par2_t3
agree_ideal_par3_t3 ~~ agree_ideal_par3_t3

# Latent Variable Means
agree_ideal1 ~ 0*1
agree_ideal2 ~ 1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
agree_ideal2 ~~ agree_ideal2
agree_ideal1 ~~ agree_ideal2
'
fit_strong2_agree_ideal <- cfa(strong2_agree_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong2_agree_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict2_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*agree_ideal_par1_t2 + lambda1*agree_ideal_par1_t2 + lambda2*agree_ideal_par2_t2 + lambda3*agree_ideal_par3_t2
agree_ideal2 =~ NA*agree_ideal_par1_t3 + lambda1*agree_ideal_par1_t3 + lambda2*agree_ideal_par2_t3 + lambda3*agree_ideal_par3_t3

# Intercepts
agree_ideal_par1_t2 ~ i1*1
agree_ideal_par2_t2 ~ i2*1
agree_ideal_par3_t2 ~ i3*1

agree_ideal_par1_t3 ~ i1*1
agree_ideal_par2_t3 ~ i2*1
agree_ideal_par3_t3 ~ i3*1

# Unique Variances
agree_ideal_par1_t2 ~~ u1*agree_ideal_par1_t2
agree_ideal_par2_t2 ~~ u2*agree_ideal_par2_t2
agree_ideal_par3_t2 ~~ u3*agree_ideal_par3_t2

agree_ideal_par1_t3 ~~ u1*agree_ideal_par1_t3
agree_ideal_par2_t3 ~~ u2*agree_ideal_par2_t3
agree_ideal_par3_t3 ~~ u3*agree_ideal_par3_t3

# Latent Variable Means
agree_ideal1 ~ 0*1
agree_ideal2 ~ 1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
agree_ideal2 ~~ agree_ideal2
agree_ideal1 ~~ agree_ideal2
'
fit_strict2_agree_ideal <- cfa(strict2_agree_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict2_agree_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural2_agree_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak2_agree_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong2_agree_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict2_agree_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   577    19  183. 4928. 5011. 0.891 0.795 0.195 0.0537
2 weak         577    17  186. 4927. 5001. 0.890 0.835 0.175 0.0717
3 strong       577    15  188. 4924. 4990. 0.891 0.863 0.159 0.0724
4 strict       577    12  189. 4919. 4972. 0.892 0.892 0.142 0.0654
# chi-square difference test for nested models 
anova(fit_configural2_agree_ideal, fit_weak2_agree_ideal)

Chi-Squared Difference Test

                            Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_configural2_agree_ideal  8 4928.0 5010.8 183.39                            
fit_weak2_agree_ideal       10 4927.1 5001.2 186.45     3.0622 0.030339       2
                            Pr(>Chisq)
fit_configural2_agree_ideal           
fit_weak2_agree_ideal           0.2163
anova(fit_weak2_agree_ideal, fit_strong2_agree_ideal)

Chi-Squared Difference Test

                        Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak2_agree_ideal   10 4927.1 5001.2 186.45                         
fit_strong2_agree_ideal 12 4924.5 4989.8 187.84     1.3937     0       2
                        Pr(>Chisq)
fit_weak2_agree_ideal             
fit_strong2_agree_ideal     0.4982
anova(fit_strong2_agree_ideal, fit_strict2_agree_ideal)

Chi-Squared Difference Test

                        Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong2_agree_ideal 12 4924.5 4989.8 187.84                         
fit_strict2_agree_ideal 15 4919.5 4971.7 188.82    0.97691     0       3
                        Pr(>Chisq)
fit_strong2_agree_ideal           
fit_strict2_agree_ideal     0.8068

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.3.5 Conscientiousness: current-personality (from T2 to T3)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural2_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*consc_curr_par1_t2 + lambda1*consc_curr_par1_t2 + consc_curr_par2_t2 + consc_curr_par3_t2
consc_curr2 =~ NA*consc_curr_par1_t3 + lambda1*consc_curr_par1_t3 + consc_curr_par2_t3 + consc_curr_par3_t3

# Intercepts
consc_curr_par1_t2 ~ i1*1
consc_curr_par2_t2 ~ 1
consc_curr_par3_t2 ~ 1

consc_curr_par1_t3 ~ i1*1
consc_curr_par2_t3 ~ 1
consc_curr_par3_t3 ~ 1

# Unique Variances
consc_curr_par1_t2 ~~ consc_curr_par1_t2
consc_curr_par2_t2 ~~ consc_curr_par2_t2
consc_curr_par3_t2 ~~ consc_curr_par3_t2

consc_curr_par1_t3 ~~ consc_curr_par1_t3
consc_curr_par2_t3 ~~ consc_curr_par2_t3
consc_curr_par3_t3 ~~ consc_curr_par3_t3

# Latent Variable Means
consc_curr1 ~ 0*1
consc_curr2 ~ 1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
consc_curr2 ~~ consc_curr2
consc_curr1 ~~ consc_curr2
'
fit_configural2_consc_curr <- cfa(configural2_consc_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural2_consc_curr, fit.measures = TRUE)

# Weak invariance model
weak2_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*consc_curr_par1_t2 + lambda1*consc_curr_par1_t2 + lambda2*consc_curr_par2_t2 + lambda3*consc_curr_par3_t2
consc_curr2 =~ NA*consc_curr_par1_t3 + lambda1*consc_curr_par1_t3 + lambda2*consc_curr_par2_t3 + lambda3*consc_curr_par3_t3

# Intercepts
consc_curr_par1_t2 ~ i1*1
consc_curr_par2_t2 ~ 1
consc_curr_par3_t2 ~ 1

consc_curr_par1_t3 ~ i1*1
consc_curr_par2_t3 ~ 1
consc_curr_par3_t3 ~ 1

# Unique Variances
consc_curr_par1_t2 ~~ consc_curr_par1_t2
consc_curr_par2_t2 ~~ consc_curr_par2_t2
consc_curr_par3_t2 ~~ consc_curr_par3_t2

consc_curr_par1_t3 ~~ consc_curr_par1_t3
consc_curr_par2_t3 ~~ consc_curr_par2_t3
consc_curr_par3_t3 ~~ consc_curr_par3_t3

# Latent Variable Means
consc_curr1 ~ 0*1
consc_curr2 ~ 1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
consc_curr2 ~~ consc_curr2
consc_curr1 ~~ consc_curr2
'
fit_weak2_consc_curr <- cfa(weak2_consc_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak2_consc_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong2_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*consc_curr_par1_t2 + lambda1*consc_curr_par1_t2 + lambda2*consc_curr_par2_t2 + lambda3*consc_curr_par3_t2
consc_curr2 =~ NA*consc_curr_par1_t3 + lambda1*consc_curr_par1_t3 + lambda2*consc_curr_par2_t3 + lambda3*consc_curr_par3_t3

# Intercepts
consc_curr_par1_t2 ~ i1*1
consc_curr_par2_t2 ~ i2*1
consc_curr_par3_t2 ~ i3*1

consc_curr_par1_t3 ~ i1*1
consc_curr_par2_t3 ~ i2*1
consc_curr_par3_t3 ~ i3*1

# Unique Variances
consc_curr_par1_t2 ~~ consc_curr_par1_t2
consc_curr_par2_t2 ~~ consc_curr_par2_t2
consc_curr_par3_t2 ~~ consc_curr_par3_t2

consc_curr_par1_t3 ~~ consc_curr_par1_t3
consc_curr_par2_t3 ~~ consc_curr_par2_t3
consc_curr_par3_t3 ~~ consc_curr_par3_t3

# Latent Variable Means
consc_curr1 ~ 0*1
consc_curr2 ~ 1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
consc_curr2 ~~ consc_curr2
consc_curr1 ~~ consc_curr2
'
fit_strong2_consc_curr <- cfa(strong2_consc_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong2_consc_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict2_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*consc_curr_par1_t2 + lambda1*consc_curr_par1_t2 + lambda2*consc_curr_par2_t2 + lambda3*consc_curr_par3_t2
consc_curr2 =~ NA*consc_curr_par1_t3 + lambda1*consc_curr_par1_t3 + lambda2*consc_curr_par2_t3 + lambda3*consc_curr_par3_t3

# Intercepts
consc_curr_par1_t2 ~ i1*1
consc_curr_par2_t2 ~ i2*1
consc_curr_par3_t2 ~ i3*1

consc_curr_par1_t3 ~ i1*1
consc_curr_par2_t3 ~ i2*1
consc_curr_par3_t3 ~ i3*1

# Unique Variances
consc_curr_par1_t2 ~~ u1*consc_curr_par1_t2
consc_curr_par2_t2 ~~ u2*consc_curr_par2_t2
consc_curr_par3_t2 ~~ u3*consc_curr_par3_t2

consc_curr_par1_t3 ~~ u1*consc_curr_par1_t3
consc_curr_par2_t3 ~~ u2*consc_curr_par2_t3
consc_curr_par3_t3 ~~ u3*consc_curr_par3_t3

# Latent Variable Means
consc_curr1 ~ 0*1
consc_curr2 ~ 1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
consc_curr2 ~~ consc_curr2
consc_curr1 ~~ consc_curr2
'
fit_strict2_consc_curr <- cfa(strict2_consc_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict2_consc_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural2_consc_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak2_consc_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong2_consc_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict2_consc_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   577    19  173. 5578. 5661. 0.940 0.888 0.189 0.0312
2 weak         577    17  173. 5575. 5649. 0.941 0.912 0.168 0.0317
3 strong       577    15  174. 5571. 5637. 0.942 0.927 0.153 0.0314
4 strict       577    12  174. 5566. 5618. 0.942 0.942 0.136 0.0317
# chi-square difference test for nested models 
anova(fit_configural2_consc_curr, fit_weak2_consc_curr)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural2_consc_curr  8 5578.5 5661.3 173.11                         
fit_weak2_consc_curr       10 5574.6 5648.7 173.29     0.1738     0       2
                           Pr(>Chisq)
fit_configural2_consc_curr           
fit_weak2_consc_curr           0.9168
anova(fit_weak2_consc_curr, fit_strong2_consc_curr)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak2_consc_curr   10 5574.6 5648.7 173.29                         
fit_strong2_consc_curr 12 5571.1 5636.5 173.79    0.50808     0       2
                       Pr(>Chisq)
fit_weak2_consc_curr             
fit_strong2_consc_curr     0.7757
anova(fit_strong2_consc_curr, fit_strict2_consc_curr)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong2_consc_curr 12 5571.1 5636.5 173.79                         
fit_strict2_consc_curr 15 5565.8 5618.1 174.44    0.64404     0       3
                       Pr(>Chisq)
fit_strong2_consc_curr           
fit_strict2_consc_curr     0.8863

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.3.6 Conscientiousness: ideal-personality (from T2 to T3)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural2_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*consc_ideal_par1_t2 + lambda1*consc_ideal_par1_t2 + consc_ideal_par2_t2 + consc_ideal_par3_t2
consc_ideal2 =~ NA*consc_ideal_par1_t3 + lambda1*consc_ideal_par1_t3 + consc_ideal_par2_t3 + consc_ideal_par3_t3

# Intercepts
consc_ideal_par1_t2 ~ i1*1
consc_ideal_par2_t2 ~ 1
consc_ideal_par3_t2 ~ 1

consc_ideal_par1_t3 ~ i1*1
consc_ideal_par2_t3 ~ 1
consc_ideal_par3_t3 ~ 1

# Unique Variances
consc_ideal_par1_t2 ~~ consc_ideal_par1_t2
consc_ideal_par2_t2 ~~ consc_ideal_par2_t2
consc_ideal_par3_t2 ~~ consc_ideal_par3_t2

consc_ideal_par1_t3 ~~ consc_ideal_par1_t3
consc_ideal_par2_t3 ~~ consc_ideal_par2_t3
consc_ideal_par3_t3 ~~ consc_ideal_par3_t3

# Latent Variable Means
consc_ideal1 ~ 0*1
consc_ideal2 ~ 1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
consc_ideal2 ~~ consc_ideal2
consc_ideal1 ~~ consc_ideal2
'
fit_configural2_consc_ideal <- cfa(configural2_consc_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural2_consc_ideal, fit.measures = TRUE)

# Weak invariance model
weak2_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*consc_ideal_par1_t2 + lambda1*consc_ideal_par1_t2 + lambda2*consc_ideal_par2_t2 + lambda3*consc_ideal_par3_t2
consc_ideal2 =~ NA*consc_ideal_par1_t3 + lambda1*consc_ideal_par1_t3 + lambda2*consc_ideal_par2_t3 + lambda3*consc_ideal_par3_t3

# Intercepts
consc_ideal_par1_t2 ~ i1*1
consc_ideal_par2_t2 ~ 1
consc_ideal_par3_t2 ~ 1

consc_ideal_par1_t3 ~ i1*1
consc_ideal_par2_t3 ~ 1
consc_ideal_par3_t3 ~ 1

# Unique Variances
consc_ideal_par1_t2 ~~ consc_ideal_par1_t2
consc_ideal_par2_t2 ~~ consc_ideal_par2_t2
consc_ideal_par3_t2 ~~ consc_ideal_par3_t2

consc_ideal_par1_t3 ~~ consc_ideal_par1_t3
consc_ideal_par2_t3 ~~ consc_ideal_par2_t3
consc_ideal_par3_t3 ~~ consc_ideal_par3_t3

# Latent Variable Means
consc_ideal1 ~ 0*1
consc_ideal2 ~ 1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
consc_ideal2 ~~ consc_ideal2
consc_ideal1 ~~ consc_ideal2
'
fit_weak2_consc_ideal <- cfa(weak2_consc_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak2_consc_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong2_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*consc_ideal_par1_t2 + lambda1*consc_ideal_par1_t2 + lambda2*consc_ideal_par2_t2 + lambda3*consc_ideal_par3_t2
consc_ideal2 =~ NA*consc_ideal_par1_t3 + lambda1*consc_ideal_par1_t3 + lambda2*consc_ideal_par2_t3 + lambda3*consc_ideal_par3_t3

# Intercepts
consc_ideal_par1_t2 ~ i1*1
consc_ideal_par2_t2 ~ i2*1
consc_ideal_par3_t2 ~ i3*1

consc_ideal_par1_t3 ~ i1*1
consc_ideal_par2_t3 ~ i2*1
consc_ideal_par3_t3 ~ i3*1

# Unique Variances
consc_ideal_par1_t2 ~~ consc_ideal_par1_t2
consc_ideal_par2_t2 ~~ consc_ideal_par2_t2
consc_ideal_par3_t2 ~~ consc_ideal_par3_t2

consc_ideal_par1_t3 ~~ consc_ideal_par1_t3
consc_ideal_par2_t3 ~~ consc_ideal_par2_t3
consc_ideal_par3_t3 ~~ consc_ideal_par3_t3

# Latent Variable Means
consc_ideal1 ~ 0*1
consc_ideal2 ~ 1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
consc_ideal2 ~~ consc_ideal2
consc_ideal1 ~~ consc_ideal2
'
fit_strong2_consc_ideal <- cfa(strong2_consc_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong2_consc_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict2_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*consc_ideal_par1_t2 + lambda1*consc_ideal_par1_t2 + lambda2*consc_ideal_par2_t2 + lambda3*consc_ideal_par3_t2
consc_ideal2 =~ NA*consc_ideal_par1_t3 + lambda1*consc_ideal_par1_t3 + lambda2*consc_ideal_par2_t3 + lambda3*consc_ideal_par3_t3

# Intercepts
consc_ideal_par1_t2 ~ i1*1
consc_ideal_par2_t2 ~ i2*1
consc_ideal_par3_t2 ~ i3*1

consc_ideal_par1_t3 ~ i1*1
consc_ideal_par2_t3 ~ i2*1
consc_ideal_par3_t3 ~ i3*1

# Unique Variances
consc_ideal_par1_t2 ~~ u1*consc_ideal_par1_t2
consc_ideal_par2_t2 ~~ u2*consc_ideal_par2_t2
consc_ideal_par3_t2 ~~ u3*consc_ideal_par3_t2

consc_ideal_par1_t3 ~~ u1*consc_ideal_par1_t3
consc_ideal_par2_t3 ~~ u2*consc_ideal_par2_t3
consc_ideal_par3_t3 ~~ u3*consc_ideal_par3_t3

# Latent Variable Means
consc_ideal1 ~ 0*1
consc_ideal2 ~ 1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
consc_ideal2 ~~ consc_ideal2
consc_ideal1 ~~ consc_ideal2
'
fit_strict2_consc_ideal <- cfa(strict2_consc_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict2_consc_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural2_consc_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak2_consc_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong2_consc_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict2_consc_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli  rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>  <dbl>
1 configural   577    19  70.8 4208. 4291. 0.959 0.923 0.117  0.0291
2 weak         577    17  73.4 4206. 4281. 0.959 0.938 0.105  0.0542
3 strong       577    15  75.8 4205. 4270. 0.958 0.948 0.0960 0.0561
4 strict       577    12  91.9 4215. 4267. 0.950 0.950 0.0942 0.0898
# chi-square difference test for nested models 
anova(fit_configural2_consc_ideal, fit_weak2_consc_ideal)

Chi-Squared Difference Test

                            Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_configural2_consc_ideal  8 4207.9 4290.7 70.821                            
fit_weak2_consc_ideal       10 4206.4 4280.5 73.376     2.5544 0.021919       2
                            Pr(>Chisq)
fit_configural2_consc_ideal           
fit_weak2_consc_ideal           0.2788
anova(fit_weak2_consc_ideal, fit_strong2_consc_ideal)

Chi-Squared Difference Test

                        Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_weak2_consc_ideal   10 4206.4 4280.5 73.376                            
fit_strong2_consc_ideal 12 4204.8 4270.2 75.801     2.4256 0.019204       2
                        Pr(>Chisq)
fit_weak2_consc_ideal             
fit_strong2_consc_ideal     0.2974
anova(fit_strong2_consc_ideal, fit_strict2_consc_ideal)

Chi-Squared Difference Test

                        Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_strong2_consc_ideal 12 4204.8 4270.2 75.801                            
fit_strict2_consc_ideal 15 4214.9 4267.2 91.852     16.051 0.086831       3
                        Pr(>Chisq)   
fit_strong2_consc_ideal              
fit_strict2_consc_ideal   0.001107 **
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strong measurement invariance is given.

4.3.7 Neuroticism: current-personality (from T2 to T3)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural2_neuro_curr <- '
# Define the latent factors
neuro_curr1 =~ NA*neuro_curr_par1_t2 + lambda1*neuro_curr_par1_t2 + neuro_curr_par2_t2 + neuro_curr_par3_t2
neuro_curr2 =~ NA*neuro_curr_par1_t3 + lambda1*neuro_curr_par1_t3 + neuro_curr_par2_t3 + neuro_curr_par3_t3

# Intercepts
neuro_curr_par1_t2 ~ i1*1
neuro_curr_par2_t2 ~ 1
neuro_curr_par3_t2 ~ 1

neuro_curr_par1_t3 ~ i1*1
neuro_curr_par2_t3 ~ 1
neuro_curr_par3_t3 ~ 1

# Unique Variances
neuro_curr_par1_t2 ~~ neuro_curr_par1_t2
neuro_curr_par2_t2 ~~ neuro_curr_par2_t2
neuro_curr_par3_t2 ~~ neuro_curr_par3_t2

neuro_curr_par1_t3 ~~ neuro_curr_par1_t3
neuro_curr_par2_t3 ~~ neuro_curr_par2_t3
neuro_curr_par3_t3 ~~ neuro_curr_par3_t3

# Latent Variable Means
neuro_curr1 ~ 0*1
neuro_curr2 ~ 1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
neuro_curr2 ~~ neuro_curr2
neuro_curr1 ~~ neuro_curr2
'
fit_configural2_neuro_curr <- cfa(configural2_neuro_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural2_neuro_curr, fit.measures = TRUE)

# Weak invariance model
weak2_neuro_curr <- '
# Define the latent factors
neuro_curr1 =~ NA*neuro_curr_par1_t2 + lambda1*neuro_curr_par1_t2 + lambda2*neuro_curr_par2_t2 + lambda3*neuro_curr_par3_t2
neuro_curr2 =~ NA*neuro_curr_par1_t3 + lambda1*neuro_curr_par1_t3 + lambda2*neuro_curr_par2_t3 + lambda3*neuro_curr_par3_t3

# Intercepts
neuro_curr_par1_t2 ~ i1*1
neuro_curr_par2_t2 ~ 1
neuro_curr_par3_t2 ~ 1

neuro_curr_par1_t3 ~ i1*1
neuro_curr_par2_t3 ~ 1
neuro_curr_par3_t3 ~ 1

# Unique Variances
neuro_curr_par1_t2 ~~ neuro_curr_par1_t2
neuro_curr_par2_t2 ~~ neuro_curr_par2_t2
neuro_curr_par3_t2 ~~ neuro_curr_par3_t2

neuro_curr_par1_t3 ~~ neuro_curr_par1_t3
neuro_curr_par2_t3 ~~ neuro_curr_par2_t3
neuro_curr_par3_t3 ~~ neuro_curr_par3_t3

# Latent Variable Means
neuro_curr1 ~ 0*1
neuro_curr2 ~ 1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
neuro_curr2 ~~ neuro_curr2
neuro_curr1 ~~ neuro_curr2
'
fit_weak2_neuro_curr <- cfa(weak2_neuro_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak2_neuro_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong2_neuro_curr <- '
# Define the latent factors
neuro_curr1 =~ NA*neuro_curr_par1_t2 + lambda1*neuro_curr_par1_t2 + lambda2*neuro_curr_par2_t2 + lambda3*neuro_curr_par3_t2
neuro_curr2 =~ NA*neuro_curr_par1_t3 + lambda1*neuro_curr_par1_t3 + lambda2*neuro_curr_par2_t3 + lambda3*neuro_curr_par3_t3

# Intercepts
neuro_curr_par1_t2 ~ i1*1
neuro_curr_par2_t2 ~ i2*1
neuro_curr_par3_t2 ~ i3*1

neuro_curr_par1_t3 ~ i1*1
neuro_curr_par2_t3 ~ i2*1
neuro_curr_par3_t3 ~ i3*1

# Unique Variances
neuro_curr_par1_t2 ~~ neuro_curr_par1_t2
neuro_curr_par2_t2 ~~ neuro_curr_par2_t2
neuro_curr_par3_t2 ~~ neuro_curr_par3_t2

neuro_curr_par1_t3 ~~ neuro_curr_par1_t3
neuro_curr_par2_t3 ~~ neuro_curr_par2_t3
neuro_curr_par3_t3 ~~ neuro_curr_par3_t3

# Latent Variable Means
neuro_curr1 ~ 0*1
neuro_curr2 ~ 1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
neuro_curr2 ~~ neuro_curr2
neuro_curr1 ~~ neuro_curr2
'
fit_strong2_neuro_curr <- cfa(strong2_neuro_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong2_neuro_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict2_neuro_curr <- '
# Define the latent factors
neuro_curr1 =~ NA*neuro_curr_par1_t2 + lambda1*neuro_curr_par1_t2 + lambda2*neuro_curr_par2_t2 + lambda3*neuro_curr_par3_t2
neuro_curr2 =~ NA*neuro_curr_par1_t3 + lambda1*neuro_curr_par1_t3 + lambda2*neuro_curr_par2_t3 + lambda3*neuro_curr_par3_t3

# Intercepts
neuro_curr_par1_t2 ~ i1*1
neuro_curr_par2_t2 ~ i2*1
neuro_curr_par3_t2 ~ i3*1

neuro_curr_par1_t3 ~ i1*1
neuro_curr_par2_t3 ~ i2*1
neuro_curr_par3_t3 ~ i3*1

# Unique Variances
neuro_curr_par1_t2 ~~ u1*neuro_curr_par1_t2
neuro_curr_par2_t2 ~~ u2*neuro_curr_par2_t2
neuro_curr_par3_t2 ~~ u3*neuro_curr_par3_t2

neuro_curr_par1_t3 ~~ u1*neuro_curr_par1_t3
neuro_curr_par2_t3 ~~ u2*neuro_curr_par2_t3
neuro_curr_par3_t3 ~~ u3*neuro_curr_par3_t3

# Latent Variable Means
neuro_curr1 ~ 0*1
neuro_curr2 ~ 1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
neuro_curr2 ~~ neuro_curr2
neuro_curr1 ~~ neuro_curr2
'
fit_strict2_neuro_curr <- cfa(strict2_neuro_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict2_neuro_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural2_neuro_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak2_neuro_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong2_neuro_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict2_neuro_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli  rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>  <dbl>
1 configural   577    19  99.1 5872. 5955. 0.968 0.939 0.140  0.0219
2 weak         577    17  99.4 5868. 5942. 0.968 0.952 0.124  0.0232
3 strong       577    15 101.  5866. 5931. 0.968 0.961 0.113  0.0232
4 strict       577    12 101.  5860. 5913. 0.969 0.969 0.0999 0.0243
# chi-square difference test for nested models 
anova(fit_configural2_neuro_curr, fit_weak2_neuro_curr)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural2_neuro_curr  8 5872.1 5954.9 99.065                         
fit_weak2_neuro_curr       10 5868.4 5942.5 99.397    0.33158     0       2
                           Pr(>Chisq)
fit_configural2_neuro_curr           
fit_weak2_neuro_curr           0.8472
anova(fit_weak2_neuro_curr, fit_strong2_neuro_curr)

Chi-Squared Difference Test

                       Df    AIC    BIC   Chisq Chisq diff RMSEA Df diff
fit_weak2_neuro_curr   10 5868.4 5942.5  99.397                         
fit_strong2_neuro_curr 12 5865.6 5930.9 100.582     1.1852     0       2
                       Pr(>Chisq)
fit_weak2_neuro_curr             
fit_strong2_neuro_curr     0.5529
anova(fit_strong2_neuro_curr, fit_strict2_neuro_curr)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong2_neuro_curr 12 5865.6 5930.9 100.58                         
fit_strict2_neuro_curr 15 5860.4 5912.7 101.46    0.87338     0       3
                       Pr(>Chisq)
fit_strong2_neuro_curr           
fit_strict2_neuro_curr     0.8318

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.3.8 Neuroticism: ideal-personality (from T2 to T3)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural2_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*neuro_ideal_par1_t2 + lambda1*neuro_ideal_par1_t2 + neuro_ideal_par2_t2 + neuro_ideal_par3_t2
neuro_ideal2 =~ NA*neuro_ideal_par1_t3 + lambda1*neuro_ideal_par1_t3 + neuro_ideal_par2_t3 + neuro_ideal_par3_t3

# Intercepts
neuro_ideal_par1_t2 ~ i1*1
neuro_ideal_par2_t2 ~ 1
neuro_ideal_par3_t2 ~ 1

neuro_ideal_par1_t3 ~ i1*1
neuro_ideal_par2_t3 ~ 1
neuro_ideal_par3_t3 ~ 1

# Unique Variances
neuro_ideal_par1_t2 ~~ neuro_ideal_par1_t2
neuro_ideal_par2_t2 ~~ neuro_ideal_par2_t2
neuro_ideal_par3_t2 ~~ neuro_ideal_par3_t2

neuro_ideal_par1_t3 ~~ neuro_ideal_par1_t3
neuro_ideal_par2_t3 ~~ neuro_ideal_par2_t3
neuro_ideal_par3_t3 ~~ neuro_ideal_par3_t3

# Latent Variable Means
neuro_ideal1 ~ 0*1
neuro_ideal2 ~ 1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
neuro_ideal2 ~~ neuro_ideal2
neuro_ideal1 ~~ neuro_ideal2
'
fit_configural2_neuro_ideal <- cfa(configural2_neuro_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural2_neuro_ideal, fit.measures = TRUE)

# Weak invariance model
weak2_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*neuro_ideal_par1_t2 + lambda1*neuro_ideal_par1_t2 + lambda2*neuro_ideal_par2_t2 + lambda3*neuro_ideal_par3_t2
neuro_ideal2 =~ NA*neuro_ideal_par1_t3 + lambda1*neuro_ideal_par1_t3 + lambda2*neuro_ideal_par2_t3 + lambda3*neuro_ideal_par3_t3

# Intercepts
neuro_ideal_par1_t2 ~ i1*1
neuro_ideal_par2_t2 ~ 1
neuro_ideal_par3_t2 ~ 1

neuro_ideal_par1_t3 ~ i1*1
neuro_ideal_par2_t3 ~ 1
neuro_ideal_par3_t3 ~ 1

# Unique Variances
neuro_ideal_par1_t2 ~~ neuro_ideal_par1_t2
neuro_ideal_par2_t2 ~~ neuro_ideal_par2_t2
neuro_ideal_par3_t2 ~~ neuro_ideal_par3_t2

neuro_ideal_par1_t3 ~~ neuro_ideal_par1_t3
neuro_ideal_par2_t3 ~~ neuro_ideal_par2_t3
neuro_ideal_par3_t3 ~~ neuro_ideal_par3_t3

# Latent Variable Means
neuro_ideal1 ~ 0*1
neuro_ideal2 ~ 1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
neuro_ideal2 ~~ neuro_ideal2
neuro_ideal1 ~~ neuro_ideal2
'
fit_weak2_neuro_ideal <- cfa(weak2_neuro_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak2_neuro_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong2_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*neuro_ideal_par1_t2 + lambda1*neuro_ideal_par1_t2 + lambda2*neuro_ideal_par2_t2 + lambda3*neuro_ideal_par3_t2
neuro_ideal2 =~ NA*neuro_ideal_par1_t3 + lambda1*neuro_ideal_par1_t3 + lambda2*neuro_ideal_par2_t3 + lambda3*neuro_ideal_par3_t3

# Intercepts
neuro_ideal_par1_t2 ~ i1*1
neuro_ideal_par2_t2 ~ i2*1
neuro_ideal_par3_t2 ~ i3*1

neuro_ideal_par1_t3 ~ i1*1
neuro_ideal_par2_t3 ~ i2*1
neuro_ideal_par3_t3 ~ i3*1

# Unique Variances
neuro_ideal_par1_t2 ~~ neuro_ideal_par1_t2
neuro_ideal_par2_t2 ~~ neuro_ideal_par2_t2
neuro_ideal_par3_t2 ~~ neuro_ideal_par3_t2

neuro_ideal_par1_t3 ~~ neuro_ideal_par1_t3
neuro_ideal_par2_t3 ~~ neuro_ideal_par2_t3
neuro_ideal_par3_t3 ~~ neuro_ideal_par3_t3

# Latent Variable Means
neuro_ideal1 ~ 0*1
neuro_ideal2 ~ 1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
neuro_ideal2 ~~ neuro_ideal2
neuro_ideal1 ~~ neuro_ideal2
'
fit_strong2_neuro_ideal <- cfa(strong2_neuro_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong2_neuro_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict2_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*neuro_ideal_par1_t2 + lambda1*neuro_ideal_par1_t2 + lambda2*neuro_ideal_par2_t2 + lambda3*neuro_ideal_par3_t2
neuro_ideal2 =~ NA*neuro_ideal_par1_t3 + lambda1*neuro_ideal_par1_t3 + lambda2*neuro_ideal_par2_t3 + lambda3*neuro_ideal_par3_t3

# Intercepts
neuro_ideal_par1_t2 ~ i1*1
neuro_ideal_par2_t2 ~ i2*1
neuro_ideal_par3_t2 ~ i3*1

neuro_ideal_par1_t3 ~ i1*1
neuro_ideal_par2_t3 ~ i2*1
neuro_ideal_par3_t3 ~ i3*1

# Unique Variances
neuro_ideal_par1_t2 ~~ u1*neuro_ideal_par1_t2
neuro_ideal_par2_t2 ~~ u2*neuro_ideal_par2_t2
neuro_ideal_par3_t2 ~~ u3*neuro_ideal_par3_t2

neuro_ideal_par1_t3 ~~ u1*neuro_ideal_par1_t3
neuro_ideal_par2_t3 ~~ u2*neuro_ideal_par2_t3
neuro_ideal_par3_t3 ~~ u3*neuro_ideal_par3_t3

# Latent Variable Means
neuro_ideal1 ~ 0*1
neuro_ideal2 ~ 1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
neuro_ideal2 ~~ neuro_ideal2
neuro_ideal1 ~~ neuro_ideal2
'
fit_strict2_neuro_ideal <- cfa(strict2_neuro_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict2_neuro_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural2_neuro_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak2_neuro_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong2_neuro_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict2_neuro_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli  rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>  <dbl>
1 configural   577    19  37.4 4514. 4596. 0.978 0.958 0.0798 0.0219
2 weak         577    17  40.1 4512. 4586. 0.977 0.966 0.0722 0.0309
3 strong       577    15  43.1 4511. 4577. 0.976 0.971 0.0670 0.0364
4 strict       577    12  48.3 4510. 4563. 0.975 0.975 0.0620 0.0280
# chi-square difference test for nested models 
anova(fit_configural2_neuro_ideal, fit_weak2_neuro_ideal)

Chi-Squared Difference Test

                            Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_configural2_neuro_ideal  8 4513.5 4596.3 37.415                            
fit_weak2_neuro_ideal       10 4512.2 4586.3 40.113     2.6987 0.024606       2
                            Pr(>Chisq)
fit_configural2_neuro_ideal           
fit_weak2_neuro_ideal           0.2594
anova(fit_weak2_neuro_ideal, fit_strong2_neuro_ideal)

Chi-Squared Difference Test

                        Df    AIC    BIC  Chisq Chisq diff   RMSEA Df diff
fit_weak2_neuro_ideal   10 4512.2 4586.3 40.113                           
fit_strong2_neuro_ideal 12 4511.3 4576.6 43.122     3.0084 0.02956       2
                        Pr(>Chisq)
fit_weak2_neuro_ideal             
fit_strong2_neuro_ideal     0.2222
anova(fit_strong2_neuro_ideal, fit_strict2_neuro_ideal)

Chi-Squared Difference Test

                        Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_strong2_neuro_ideal 12 4511.3 4576.6 43.122                            
fit_strict2_neuro_ideal 15 4510.4 4562.7 48.255     5.1328 0.035101       3
                        Pr(>Chisq)
fit_strong2_neuro_ideal           
fit_strict2_neuro_ideal     0.1623

Good model fit across all stages of measurement invariance. Chi^2 tests indicate that strict measurement invariance is given.

4.3.9 Openness: current-personality (from T2 to T3)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural2_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*openn_curr_par1_t2 + lambda1*openn_curr_par1_t2 + openn_curr_par2_t2 + openn_curr_par3_t2
openn_curr2 =~ NA*openn_curr_par1_t3 + lambda1*openn_curr_par1_t3 + openn_curr_par2_t3 + openn_curr_par3_t3

# Intercepts
openn_curr_par1_t2 ~ i1*1
openn_curr_par2_t2 ~ 1
openn_curr_par3_t2 ~ 1

openn_curr_par1_t3 ~ i1*1
openn_curr_par2_t3 ~ 1
openn_curr_par3_t3 ~ 1

# Unique Variances
openn_curr_par1_t2 ~~ openn_curr_par1_t2
openn_curr_par2_t2 ~~ openn_curr_par2_t2
openn_curr_par3_t2 ~~ openn_curr_par3_t2

openn_curr_par1_t3 ~~ openn_curr_par1_t3
openn_curr_par2_t3 ~~ openn_curr_par2_t3
openn_curr_par3_t3 ~~ openn_curr_par3_t3

# Latent Variable Means
openn_curr1 ~ 0*1
openn_curr2 ~ 1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
openn_curr2 ~~ openn_curr2
openn_curr1 ~~ openn_curr2
'
fit_configural2_openn_curr <- cfa(configural2_openn_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural2_openn_curr, fit.measures = TRUE)

# Weak invariance model
weak2_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*openn_curr_par1_t2 + lambda1*openn_curr_par1_t2 + lambda2*openn_curr_par2_t2 + lambda3*openn_curr_par3_t2
openn_curr2 =~ NA*openn_curr_par1_t3 + lambda1*openn_curr_par1_t3 + lambda2*openn_curr_par2_t3 + lambda3*openn_curr_par3_t3

# Intercepts
openn_curr_par1_t2 ~ i1*1
openn_curr_par2_t2 ~ 1
openn_curr_par3_t2 ~ 1

openn_curr_par1_t3 ~ i1*1
openn_curr_par2_t3 ~ 1
openn_curr_par3_t3 ~ 1

# Unique Variances
openn_curr_par1_t2 ~~ openn_curr_par1_t2
openn_curr_par2_t2 ~~ openn_curr_par2_t2
openn_curr_par3_t2 ~~ openn_curr_par3_t2

openn_curr_par1_t3 ~~ openn_curr_par1_t3
openn_curr_par2_t3 ~~ openn_curr_par2_t3
openn_curr_par3_t3 ~~ openn_curr_par3_t3

# Latent Variable Means
openn_curr1 ~ 0*1
openn_curr2 ~ 1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
openn_curr2 ~~ openn_curr2
openn_curr1 ~~ openn_curr2
'
fit_weak2_openn_curr <- cfa(weak2_openn_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak2_openn_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong2_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*openn_curr_par1_t2 + lambda1*openn_curr_par1_t2 + lambda2*openn_curr_par2_t2 + lambda3*openn_curr_par3_t2
openn_curr2 =~ NA*openn_curr_par1_t3 + lambda1*openn_curr_par1_t3 + lambda2*openn_curr_par2_t3 + lambda3*openn_curr_par3_t3

# Intercepts
openn_curr_par1_t2 ~ i1*1
openn_curr_par2_t2 ~ i2*1
openn_curr_par3_t2 ~ i3*1

openn_curr_par1_t3 ~ i1*1
openn_curr_par2_t3 ~ i2*1
openn_curr_par3_t3 ~ i3*1

# Unique Variances
openn_curr_par1_t2 ~~ openn_curr_par1_t2
openn_curr_par2_t2 ~~ openn_curr_par2_t2
openn_curr_par3_t2 ~~ openn_curr_par3_t2

openn_curr_par1_t3 ~~ openn_curr_par1_t3
openn_curr_par2_t3 ~~ openn_curr_par2_t3
openn_curr_par3_t3 ~~ openn_curr_par3_t3

# Latent Variable Means
openn_curr1 ~ 0*1
openn_curr2 ~ 1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
openn_curr2 ~~ openn_curr2
openn_curr1 ~~ openn_curr2
'
fit_strong2_openn_curr <- cfa(strong2_openn_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong2_openn_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict2_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*openn_curr_par1_t2 + lambda1*openn_curr_par1_t2 + lambda2*openn_curr_par2_t2 + lambda3*openn_curr_par3_t2
openn_curr2 =~ NA*openn_curr_par1_t3 + lambda1*openn_curr_par1_t3 + lambda2*openn_curr_par2_t3 + lambda3*openn_curr_par3_t3

# Intercepts
openn_curr_par1_t2 ~ i1*1
openn_curr_par2_t2 ~ i2*1
openn_curr_par3_t2 ~ i3*1

openn_curr_par1_t3 ~ i1*1
openn_curr_par2_t3 ~ i2*1
openn_curr_par3_t3 ~ i3*1

# Unique Variances
openn_curr_par1_t2 ~~ u1*openn_curr_par1_t2
openn_curr_par2_t2 ~~ u2*openn_curr_par2_t2
openn_curr_par3_t2 ~~ u3*openn_curr_par3_t2

openn_curr_par1_t3 ~~ u1*openn_curr_par1_t3
openn_curr_par2_t3 ~~ u2*openn_curr_par2_t3
openn_curr_par3_t3 ~~ u3*openn_curr_par3_t3

# Latent Variable Means
openn_curr1 ~ 0*1
openn_curr2 ~ 1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
openn_curr2 ~~ openn_curr2
openn_curr1 ~~ openn_curr2
'
fit_strict2_openn_curr <- cfa(strict2_openn_curr, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict2_openn_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural2_openn_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak2_openn_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong2_openn_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict2_openn_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   577    19  208. 5257. 5340. 0.911 0.834 0.208 0.0423
2 weak         577    17  209. 5254. 5328. 0.912 0.868 0.186 0.0439
3 strong       577    15  209. 5250. 5315. 0.913 0.891 0.169 0.0437
4 strict       577    12  212. 5247. 5299. 0.913 0.913 0.151 0.0447
# chi-square difference test for nested models 
anova(fit_configural2_openn_curr, fit_weak2_openn_curr)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural2_openn_curr  8 5257.1 5339.9 207.96                         
fit_weak2_openn_curr       10 5253.9 5328.0 208.72    0.76522     0       2
                           Pr(>Chisq)
fit_configural2_openn_curr           
fit_weak2_openn_curr           0.6821
anova(fit_weak2_openn_curr, fit_strong2_openn_curr)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak2_openn_curr   10 5253.9 5328.0 208.72                         
fit_strong2_openn_curr 12 5249.9 5315.3 208.75   0.028496     0       2
                       Pr(>Chisq)
fit_weak2_openn_curr             
fit_strong2_openn_curr     0.9859
anova(fit_strong2_openn_curr, fit_strict2_openn_curr)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong2_openn_curr 12 5249.9 5315.3 208.75                         
fit_strict2_openn_curr 15 5246.9 5299.2 211.71     2.9624     0       3
                       Pr(>Chisq)
fit_strong2_openn_curr           
fit_strict2_openn_curr     0.3975

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.3.10 Openness: ideal-personality (from T2 to T3)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural2_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*openn_ideal_par1_t2 + lambda1*openn_ideal_par1_t2 + openn_ideal_par2_t2 + openn_ideal_par3_t2
openn_ideal2 =~ NA*openn_ideal_par1_t3 + lambda1*openn_ideal_par1_t3 + openn_ideal_par2_t3 + openn_ideal_par3_t3

# Intercepts
openn_ideal_par1_t2 ~ i1*1
openn_ideal_par2_t2 ~ 1
openn_ideal_par3_t2 ~ 1

openn_ideal_par1_t3 ~ i1*1
openn_ideal_par2_t3 ~ 1
openn_ideal_par3_t3 ~ 1

# Unique Variances
openn_ideal_par1_t2 ~~ openn_ideal_par1_t2
openn_ideal_par2_t2 ~~ openn_ideal_par2_t2
openn_ideal_par3_t2 ~~ openn_ideal_par3_t2

openn_ideal_par1_t3 ~~ openn_ideal_par1_t3
openn_ideal_par2_t3 ~~ openn_ideal_par2_t3
openn_ideal_par3_t3 ~~ openn_ideal_par3_t3

# Latent Variable Means
openn_ideal1 ~ 0*1
openn_ideal2 ~ 1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
openn_ideal2 ~~ openn_ideal2
openn_ideal1 ~~ openn_ideal2
'
fit_configural2_openn_ideal <- cfa(configural2_openn_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_configural2_openn_ideal, fit.measures = TRUE)

# Weak invariance model
weak2_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*openn_ideal_par1_t2 + lambda1*openn_ideal_par1_t2 + lambda2*openn_ideal_par2_t2 + lambda3*openn_ideal_par3_t2
openn_ideal2 =~ NA*openn_ideal_par1_t3 + lambda1*openn_ideal_par1_t3 + lambda2*openn_ideal_par2_t3 + lambda3*openn_ideal_par3_t3

# Intercepts
openn_ideal_par1_t2 ~ i1*1
openn_ideal_par2_t2 ~ 1
openn_ideal_par3_t2 ~ 1

openn_ideal_par1_t3 ~ i1*1
openn_ideal_par2_t3 ~ 1
openn_ideal_par3_t3 ~ 1

# Unique Variances
openn_ideal_par1_t2 ~~ openn_ideal_par1_t2
openn_ideal_par2_t2 ~~ openn_ideal_par2_t2
openn_ideal_par3_t2 ~~ openn_ideal_par3_t2

openn_ideal_par1_t3 ~~ openn_ideal_par1_t3
openn_ideal_par2_t3 ~~ openn_ideal_par2_t3
openn_ideal_par3_t3 ~~ openn_ideal_par3_t3

# Latent Variable Means
openn_ideal1 ~ 0*1
openn_ideal2 ~ 1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
openn_ideal2 ~~ openn_ideal2
openn_ideal1 ~~ openn_ideal2
'
fit_weak2_openn_ideal <- cfa(weak2_openn_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_weak2_openn_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong2_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*openn_ideal_par1_t2 + lambda1*openn_ideal_par1_t2 + lambda2*openn_ideal_par2_t2 + lambda3*openn_ideal_par3_t2
openn_ideal2 =~ NA*openn_ideal_par1_t3 + lambda1*openn_ideal_par1_t3 + lambda2*openn_ideal_par2_t3 + lambda3*openn_ideal_par3_t3

# Intercepts
openn_ideal_par1_t2 ~ i1*1
openn_ideal_par2_t2 ~ i2*1
openn_ideal_par3_t2 ~ i3*1

openn_ideal_par1_t3 ~ i1*1
openn_ideal_par2_t3 ~ i2*1
openn_ideal_par3_t3 ~ i3*1

# Unique Variances
openn_ideal_par1_t2 ~~ openn_ideal_par1_t2
openn_ideal_par2_t2 ~~ openn_ideal_par2_t2
openn_ideal_par3_t2 ~~ openn_ideal_par3_t2

openn_ideal_par1_t3 ~~ openn_ideal_par1_t3
openn_ideal_par2_t3 ~~ openn_ideal_par2_t3
openn_ideal_par3_t3 ~~ openn_ideal_par3_t3

# Latent Variable Means
openn_ideal1 ~ 0*1
openn_ideal2 ~ 1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
openn_ideal2 ~~ openn_ideal2
openn_ideal1 ~~ openn_ideal2
'
fit_strong2_openn_ideal <- cfa(strong2_openn_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strong2_openn_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict2_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*openn_ideal_par1_t2 + lambda1*openn_ideal_par1_t2 + lambda2*openn_ideal_par2_t2 + lambda3*openn_ideal_par3_t2
openn_ideal2 =~ NA*openn_ideal_par1_t3 + lambda1*openn_ideal_par1_t3 + lambda2*openn_ideal_par2_t3 + lambda3*openn_ideal_par3_t3

# Intercepts
openn_ideal_par1_t2 ~ i1*1
openn_ideal_par2_t2 ~ i2*1
openn_ideal_par3_t2 ~ i3*1

openn_ideal_par1_t3 ~ i1*1
openn_ideal_par2_t3 ~ i2*1
openn_ideal_par3_t3 ~ i3*1

# Unique Variances
openn_ideal_par1_t2 ~~ u1*openn_ideal_par1_t2
openn_ideal_par2_t2 ~~ u2*openn_ideal_par2_t2
openn_ideal_par3_t2 ~~ u3*openn_ideal_par3_t2

openn_ideal_par1_t3 ~~ u1*openn_ideal_par1_t3
openn_ideal_par2_t3 ~~ u2*openn_ideal_par2_t3
openn_ideal_par3_t3 ~~ u3*openn_ideal_par3_t3

# Latent Variable Means
openn_ideal1 ~ 0*1
openn_ideal2 ~ 1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
openn_ideal2 ~~ openn_ideal2
openn_ideal1 ~~ openn_ideal2
'
fit_strict2_openn_ideal <- cfa(strict2_openn_ideal, data = df_sbsa2_wide_pers %>% filter(valid_t2==1 & rando!="Waitlist-Control"), mimic = "mplus", missing="ML")
summary(fit_strict2_openn_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural2_openn_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak2_openn_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong2_openn_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict2_openn_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   576    19  116. 5248. 5331. 0.905 0.822 0.153 0.0658
2 weak         576    17  117. 5245. 5319. 0.906 0.859 0.136 0.0712
3 strong       576    15  121. 5246. 5311. 0.904 0.880 0.126 0.0739
4 strict       576    12  123. 5241. 5294. 0.905 0.905 0.112 0.0683
# chi-square difference test for nested models 
anova(fit_configural2_openn_ideal, fit_weak2_openn_ideal)

Chi-Squared Difference Test

                            Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural2_openn_ideal  8 5248.2 5330.9 115.88                         
fit_weak2_openn_ideal       10 5245.4 5319.4 117.09     1.2118     0       2
                            Pr(>Chisq)
fit_configural2_openn_ideal           
fit_weak2_openn_ideal           0.5456
anova(fit_weak2_openn_ideal, fit_strong2_openn_ideal)

Chi-Squared Difference Test

                        Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_weak2_openn_ideal   10 5245.4 5319.4 117.09                            
fit_strong2_openn_ideal 12 5245.7 5311.0 121.41     4.3138 0.044817       2
                        Pr(>Chisq)
fit_weak2_openn_ideal             
fit_strong2_openn_ideal     0.1157
anova(fit_strong2_openn_ideal, fit_strict2_openn_ideal)

Chi-Squared Difference Test

                        Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong2_openn_ideal 12 5245.7 5311.0 121.41                         
fit_strict2_openn_ideal 15 5241.5 5293.8 123.19     1.7786     0       3
                        Pr(>Chisq)
fit_strong2_openn_ideal           
fit_strict2_openn_ideal     0.6196

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.


5 Descriptives

5.1 Sample size

How many participants at each time point and in each condition?

df_sbsa2 %>% group_by(time, rando) %>% tally()
# A tibble: 9 × 3
# Groups:   time [3]
   time rando                n
  <dbl> <chr>            <int>
1     1 Self-Acceptance    336
2     1 Self-Improvement   338
3     1 Waitlist-Control   174
4     2 Self-Acceptance    284
5     2 Self-Improvement   293
6     2 Waitlist-Control   147
7     3 Self-Acceptance    252
8     3 Self-Improvement   262
9     3 Waitlist-Control   125

5.2 Demographics

Gender and age distribution

# across all participants
df_sbsa2 %>% group_by(pid) %>% slice_head(n=1) %>% ungroup() %>% 
  mutate(gender_num = ifelse(gender=="Female", 1, 0)) %>% 
  summarise(n = n(), women = sum(gender_num), m_age = mean(age, na.rm=T), 
            sd_age = sd(age, na.rm=T), min_age = min(age, na.rm=T), max_age = max(age, na.rm=T))
# A tibble: 1 × 6
      n women m_age sd_age min_age max_age
  <int> <dbl> <dbl>  <dbl>   <dbl>   <dbl>
1   849   421  30.6   9.65      18      75
df_sbsa2 %>% group_by(time, rando) %>% 
  summarise(n = n(), m_age = mean(age, na.rm=T), sd_age = sd(age, na.rm=T), min_age = min(age, na.rm=T), max_age = max(age, na.rm=T))
# A tibble: 9 × 7
# Groups:   time [3]
   time rando                n m_age sd_age min_age max_age
  <dbl> <chr>            <int> <dbl>  <dbl>   <dbl>   <dbl>
1     1 Self-Acceptance    336  30.5   8.87      20      65
2     1 Self-Improvement   338  30.3   9.38      18      69
3     1 Waitlist-Control   174  31.2  11.2       19      75
4     2 Self-Acceptance    284  30.8   8.98      20      65
5     2 Self-Improvement   293  30.3   9.30      20      69
6     2 Waitlist-Control   147  31.9  11.8       19      75
7     3 Self-Acceptance    252  31.1   8.96      20      65
8     3 Self-Improvement   262  30.7   9.41      20      69
9     3 Waitlist-Control   125  32.4  12.3       19      75
df_sbsa2 %>% group_by(time, rando, gender) %>% 
  summarise(n = n(), m_age = mean(age, na.rm=T), sd_age = sd(age, na.rm=T), min_age = min(age, na.rm=T), max_age = max(age, na.rm=T))
# A tibble: 18 × 8
# Groups:   time, rando [9]
    time rando            gender     n m_age sd_age min_age max_age
   <dbl> <chr>            <chr>  <int> <dbl>  <dbl>   <dbl>   <dbl>
 1     1 Self-Acceptance  Female   169  31     9.82      20      65
 2     1 Self-Acceptance  Male     167  30.0   7.79      20      58
 3     1 Self-Improvement Female   166  31.0   9.15      20      65
 4     1 Self-Improvement Male     172  29.8   9.58      18      69
 5     1 Waitlist-Control Female    85  31.9  11.4       21      69
 6     1 Waitlist-Control Male      89  30.6  11.0       19      75
 7     2 Self-Acceptance  Female   142  30.9   9.83      20      65
 8     2 Self-Acceptance  Male     142  30.8   8.07      20      58
 9     2 Self-Improvement Female   143  30.8   8.82      20      59
10     2 Self-Improvement Male     150  29.9   9.75      20      69
11     2 Waitlist-Control Female    75  33.0  12.4       21      69
12     2 Waitlist-Control Male      72  30.7  11.1       19      75
13     3 Self-Acceptance  Female   127  30.8   9.64      20      65
14     3 Self-Acceptance  Male     125  31.5   8.23      20      58
15     3 Self-Improvement Female   126  31     8.65      20      56
16     3 Self-Improvement Male     136  30.4  10.1       20      69
17     3 Waitlist-Control Female    65  33.6  12.9       21      69
18     3 Waitlist-Control Male      60  31.0  11.6       19      75

Other demographics (from Prolific info):

# across all participants: ethnicity
df_sbsa2 %>% group_by(pid) %>% slice_head(n=1) %>% ungroup() %>% 
  group_by(ethnicity) %>% summarise(n = n()) %>% ungroup() %>% 
  arrange(desc(n)) %>% mutate(prop = round(n / sum(n) * 100, 3))
# A tibble: 6 × 3
  ethnicity     n   prop
  <chr>     <int>  <dbl>
1 White       553 65.1  
2 Black       207 24.4  
3 Mixed        38  4.48 
4 Asian        28  3.30 
5 Other        20  2.36 
6 <NA>          3  0.353
# across all participants: country of residence
df_sbsa2 %>% group_by(pid) %>% slice_head(n=1) %>% ungroup() %>% 
  group_by(country) %>% summarise(n = n()) %>% ungroup() %>% 
  arrange(desc(n)) %>% mutate(prop = round(n / sum(n) * 100, 3)) %>% print(n=20)
# A tibble: 30 × 3
   country            n   prop
   <chr>          <int>  <dbl>
 1 South Africa     236 27.8  
 2 Poland           119 14.0  
 3 Portugal         119 14.0  
 4 United Kingdom    96 11.3  
 5 Italy             73  8.60 
 6 Spain             46  5.42 
 7 Mexico            27  3.18 
 8 Greece            25  2.94 
 9 Hungary           18  2.12 
10 Canada            17  2.00 
11 Netherlands       10  1.18 
12 France             9  1.06 
13 Ireland            7  0.824
14 Czech Republic     6  0.707
15 Israel             5  0.589
16 United States      5  0.589
17 Australia          4  0.471
18 Chile              4  0.471
19 Estonia            4  0.471
20 Slovenia           4  0.471
# ℹ 10 more rows
# across all participants: student status
df_sbsa2 %>% group_by(pid) %>% slice_head(n=1) %>% ungroup() %>% 
  group_by(student) %>% summarise(n = n()) %>% ungroup() %>% 
  arrange(desc(n)) %>% mutate(prop = round(n / sum(n) * 100, 3))
# A tibble: 3 × 3
  student     n  prop
  <chr>   <int> <dbl>
1 No        425  50.1
2 Yes       314  37.0
3 <NA>      110  13.0
# across all participants: employment status
df_sbsa2 %>% group_by(pid) %>% slice_head(n=1) %>% ungroup() %>% 
  group_by(employed) %>% summarise(n = n()) %>% ungroup() %>% 
  arrange(desc(n)) %>% mutate(prop = round(n / sum(n) * 100, 3))
# A tibble: 7 × 3
  employed                                                     n   prop
  <chr>                                                    <int>  <dbl>
1 Full-Time                                                  385 45.3  
2 Part-Time                                                  123 14.5  
3 Unemployed (and job seeking)                               122 14.4  
4 <NA>                                                       121 14.3  
5 Other                                                       62  7.30 
6 Not in paid work (e.g. homemaker', 'retired or disabled)    28  3.30 
7 Due to start a new job within the next month                 8  0.942

5.3 Internal consistencies

On the trait/dimensional level:

# created in study 2 cleaning script 
base::load("data/int_consist_traits_st2.rda")
kable(int_consist_traits_st2, digits = 3)
trait rel_alpha_current rel_alpha_ideal rel_omega_t_current rel_omega_t_ideal rel_omega_h_current rel_omega_h_ideal
lifesat 0.881 NA 0.897 NA 0.794 NA
meaning 0.881 NA 0.944 NA 0.558 NA
selfes 0.908 NA 0.925 NA 0.718 NA
concept 0.902 NA 0.919 NA 0.848 NA
extra 0.835 0.697 0.872 0.746 0.651 0.512
agree 0.779 0.775 0.836 0.830 0.521 0.654
consc 0.878 0.813 0.903 0.854 0.699 0.692
neuro 0.901 0.781 0.918 0.828 0.771 0.692
openn 0.814 0.769 0.856 0.826 0.618 0.579

McDonald’s omega only really makes sense for the Big Five dimensions (with their three facets each) but I’ve added it for the well-being measures as well. Keep in mind that a few of the omega computations for the well-being measures only converged with error messages. These constructs were not neccessarily intended to be tested in this multidimensional manner for internal consistency.

On the facet level:

# created in study 2 cleaning script 
base::load("data/int_consist_facets_st2.rda")
kable(int_consist_facets_st2, digits = 3)
facet rel_alpha_current rel_alpha_ideal
socia 0.821 0.599
asser 0.716 0.514
energ 0.680 0.486
compa 0.529 0.459
respe 0.682 0.657
trust 0.656 0.632
organ 0.823 0.581
produ 0.774 0.690
respo 0.689 0.592
anxie 0.757 0.439
depre 0.813 0.606
volat 0.816 0.680
curio 0.657 0.592
aesth 0.672 0.526
imagi 0.718 0.580

5.4 General change/acceptance goals

Summary stats:

table(df_sbsa2$sb06_01) # How much do you want to change your personality in general?

  1   2   3   4   5 
 34  81 179  89  27 
summary(df_sbsa2$sb06_01)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
  1.000   2.000   3.000   2.985   4.000   5.000    1801 
table(df_sbsa2$sa06_01) # How much do you want to be better at accepting yourself for who you are?

  1   2   3   4   5 
  9  12  65 121 203 
summary(df_sbsa2$sa06_01)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
  1.000   4.000   4.000   4.212   5.000   5.000    1801 

Plot:

cowplot::plot_grid(
  ggplot(df_sbsa2 %>% filter(!is.na(sb06_01)), aes(x=sb06_01)) + geom_histogram(bins=5) + 
  labs(x="General change goal", y="Frequency") + theme_bw(),
  ggplot(df_sbsa2 %>% filter(!is.na(sa06_01)), aes(x=sa06_01)) + geom_histogram(bins=5) + 
  labs(x="General acceptance goal", y="Frequency") + theme_bw(), 
  ncol = 2
)

5.5 Facet-specific change/acceptance goals

Self-Improvement

Pre:
Here is a list of 15 personality traits. You might be high or low on any of these traits. Regardless of how high or low you are on these traits, we want to know how much you [want to] change. Please rate how much you would like to change your level of each of these traits, where 1 = I do not want to change and 5 = I want to change a lot.

Post:
Here is a list of 15 personality traits. During the study, you may have tried to change in some of these traits. We want to know how you think you changed in each trait. Please rate how much you changed your level of each of these traits during this study, where 1 = I am completely the same and 5 = I have changed a lot.

Self Acceptance

Pre:
Here is a list of 15 personality traits. You might be high or low on any of these traits. Regardless of how high or low you are on these traits, we want to know how much you accept yourself. Please rate how much you accept your level of each of these traits, where 1 = I completely accept myself and 5 = I want to accept myself more.

Post:
Here is a list of 15 personality traits. During the study, you may have tried to accept your level on some of these traits more. We want to know how much you think you accept yourself more because of this study. Please rate how much you accept your level of each of these traits more during this study, where 1 = I accept myself the same and 5 = I accept this about myself much more.

Plot distributions

Show the code
cowplot::plot_grid(
  ggdraw() + draw_label(names(b5_vars)[5 + 01], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_01)), aes(x=sb07_01)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_01)), aes(x=sb12_01)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_01)), aes(x=sa07_01)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_01)), aes(x=sa14_01)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 02], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_02)), aes(x=sb07_02)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_02)), aes(x=sb12_02)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_02)), aes(x=sa07_02)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_02)), aes(x=sa14_02)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 03], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_03)), aes(x=sb07_03)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_03)), aes(x=sb12_03)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_03)), aes(x=sa07_03)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_03)), aes(x=sa14_03)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ncol = 1,
  rel_heights = c(0.1, 1, 0.1, 1, 0.1, 1)
)

Show the code
cowplot::plot_grid(
  ggdraw() + draw_label(names(b5_vars)[5 + 04], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_04)), aes(x=sb07_04)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_04)), aes(x=sb12_04)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_04)), aes(x=sa07_04)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_04)), aes(x=sa14_04)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 05], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_05)), aes(x=sb07_05)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150, 175, 200), limits = c(0,220)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_05)), aes(x=sb12_05)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150, 175, 200), limits = c(0,220)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_05)), aes(x=sa07_05)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150, 175, 200), limits = c(0,220)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_05)), aes(x=sa14_05)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150, 175, 200), limits = c(0,220)),
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 06], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_06)), aes(x=sb07_06)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_06)), aes(x=sb12_06)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_06)), aes(x=sa07_06)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_06)), aes(x=sa14_06)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ncol = 1,
  rel_heights = c(0.1, 1, 0.1, 1, 0.1, 1)
)

Show the code
cowplot::plot_grid(
  ggdraw() + draw_label(names(b5_vars)[5 + 07], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_07)), aes(x=sb07_07)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_07)), aes(x=sb12_07)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_07)), aes(x=sa07_07)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_07)), aes(x=sa14_07)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 08], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_08)), aes(x=sb07_08)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_08)), aes(x=sb12_08)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_08)), aes(x=sa07_08)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_08)), aes(x=sa14_08)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 09], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_09)), aes(x=sb07_09)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_09)), aes(x=sb12_09)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_09)), aes(x=sa07_09)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_09)), aes(x=sa14_09)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ncol = 1,
  rel_heights = c(0.1, 1, 0.1, 1, 0.1, 1)
)

Show the code
cowplot::plot_grid(
  ggdraw() + draw_label(names(b5_vars)[5 + 10], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_10)), aes(x=sb07_10)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150, 175), limits = c(0,200)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_10)), aes(x=sb12_10)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150, 175), limits = c(0,200)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_10)), aes(x=sa07_10)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150, 175), limits = c(0,200)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_10)), aes(x=sa14_10)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150, 175), limits = c(0,200)), 
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 11], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_11)), aes(x=sb07_11)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_11)), aes(x=sb12_11)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_11)), aes(x=sa07_11)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_11)), aes(x=sa14_11)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 12], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_12)), aes(x=sb07_12)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_12)), aes(x=sb12_12)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_12)), aes(x=sa07_12)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_12)), aes(x=sa14_12)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ncol = 1,
  rel_heights = c(0.1, 1, 0.1, 1, 0.1, 1)
)

Show the code
cowplot::plot_grid(
  ggdraw() + draw_label(names(b5_vars)[5 + 13], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_13)), aes(x=sb07_13)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_13)), aes(x=sb12_13)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_13)), aes(x=sa07_13)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_13)), aes(x=sa14_13)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 14], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_14)), aes(x=sb07_14)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_14)), aes(x=sb12_14)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_14)), aes(x=sa07_14)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_14)), aes(x=sa14_14)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 15], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa2 %>% filter(!is.na(sb07_15)), aes(x=sb07_15)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sb12_15)), aes(x=sb12_15)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa2 %>% filter(!is.na(sa07_15)), aes(x=sa07_15)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa2 %>% filter(!is.na(sa14_15)), aes(x=sa14_15)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ncol = 1,
  rel_heights = c(0.1, 1, 0.1, 1, 0.1, 1)
)

5.6 Attrition analyses

5.6.1 From T1 to T2

Do participants who only took part in T1 differ from those taking part in T1 and T2?

Determine groups of “remainers” vs. “drop-outs” and run analyses:

Show the code
attrition_sample_1 <- df_sbsa2 %>% 
  filter(time %in% c(1:2)) %>% 
  group_by(pid) %>% mutate(last_time = max(time)) %>% ungroup() %>% 
  filter(time==1) %>% 
  select(pid, last_time, 
         contains("_comb_"), c("swls", "meaning", "selfes", "concept"), # outcomes
         gender, age, ethnicity, student, employed) %>% # demographics
  mutate(remained = last_time - 1,
         female = if_else(gender=="Female", 1, 0, NA_real_),
         white = if_else(ethnicity=="White", 1, 0, NA_real_),
         black = if_else(ethnicity=="Black", 1, 0, NA_real_),
         student = if_else(student=="Yes", 1, 0, NA_real_),
         fulltime = if_else(employed=="Full-Time", 1, 0, NA_real_),
         parttime = if_else(employed=="Part-Time", 1, 0, NA_real_),
         notemployed = if_else(employed=="Unemployed (and job seeking)" | 
                                 employed=="Not in paid work (e.g. homemaker', 'retired or disabled)" | 
                                 employed=="Due to start a new job within the next month", 1, 0, NA_real_),) %>% 
  select(-c(last_time, na_comb_curr, na_comb_ideal, gender, ethnicity, employed))

attrition_analysis_1 <- colnames(attrition_sample_1) %>%                                # Start with all column names
    setdiff( c("pid", "remained" ) ) %>%                 # ...that are not Sepal.Length
    rlang::syms() %>%                             # Convert them to symbols
    map( ~rlang::expr(lm(!!.x ~ remained,
                         data=attrition_sample_1)) ) %>%        # Create expressions
    map( eval.parent ) %>%                        # Evaluate expressions
    map( broom::tidy ) %>%                        # Tidy up the output
    bind_rows() %>%                               # Combine into a single data frame
    filter( term != "(Intercept)" ) %>%                # Drop all (Intercept) entries
    mutate(outcome = colnames(attrition_sample_1) %>% setdiff( c("pid", "remained" ) ))

Display significant differences:

attrition_analysis_1 %>% filter(p.value < .05) %>% arrange(desc(abs(estimate)))
# A tibble: 5 × 6
  term     estimate std.error statistic p.value outcome        
  <chr>       <dbl>     <dbl>     <dbl>   <dbl> <chr>          
1 remained    0.230    0.0802      2.86 0.00431 respo_comb_curr
2 remained    0.209    0.0942      2.22 0.0267  organ_comb_curr
3 remained    0.188    0.0727      2.59 0.00972 consc_comb_curr
4 remained    0.171    0.0837      2.04 0.0415  aesth_comb_curr
5 remained    0.140    0.0699      2.00 0.0458  respe_comb_curr
effectsize::cohens_d(respo_comb_curr ~ remained, data = attrition_sample_1)
Cohen's d |         95% CI
--------------------------
-0.28     | [-0.47, -0.09]

- Estimated using pooled SD.
effectsize::cohens_d(organ_comb_curr ~ remained, data = attrition_sample_1)
Cohen's d |         95% CI
--------------------------
-0.22     | [-0.41, -0.02]

- Estimated using pooled SD.
effectsize::cohens_d(consc_comb_curr ~ remained, data = attrition_sample_1)
Cohen's d |         95% CI
--------------------------
-0.25     | [-0.44, -0.06]

- Estimated using pooled SD.
effectsize::cohens_d(aesth_comb_curr ~ remained, data = attrition_sample_1)
Cohen's d |         95% CI
--------------------------
-0.20     | [-0.39, -0.01]

- Estimated using pooled SD.
effectsize::cohens_d(respe_comb_curr ~ remained, data = attrition_sample_1)
Cohen's d |         95% CI
--------------------------
-0.19     | [-0.38,  0.00]

- Estimated using pooled SD.

Participants who dropped out at T2 were less responsible, d = -0.28, 95% CI [-0.47; -0.09], p = .004, less organized, d = -0.22, 95% CI [-0.41; -0.02], p = .021, less conscientious, d = -0.25, 95% CI [-0.44; -0.06], p = .010, less aesthetically oriented, d = -0.20, 95% CI [-0.39; -0.01], p = .042, and less respectful, d = -0.19, 95% CI [-0.38; -0.001], p = .046. In addition, participants who dropped out at T3 were younger, d = -0.27, 95% CI [-0.49; -0.04], p = .019, less organized, d = -0.27, 95% CI [-0.50; -0.05], p = .017, and less conscientious, d = -0.25, 95% CI [-0.47; -0.02], p = .031, and also rated their ideal personality as less conscientious, d = -0.31, 95% CI [-0.53; -0.08], p = .007, less organized, d = -0.36, 95% CI [-0.58; -0.13], p = .002, less productive, d = -0.28, 95% CI [-0.50; -0.05], p = .015, and less imaginative, d = -0.24, 95% CI [-0.47; -0.02], p = .035.

Show all results:

attrition_analysis_1 %>% arrange(desc(abs(estimate))) %>% print(n=200)
# A tibble: 52 × 6
   term      estimate std.error statistic p.value outcome         
   <chr>        <dbl>     <dbl>     <dbl>   <dbl> <chr>           
 1 remained  1.36        0.927    1.46    0.144   age             
 2 remained  0.230       0.0802   2.86    0.00431 respo_comb_curr 
 3 remained  0.209       0.0942   2.22    0.0267  organ_comb_curr 
 4 remained  0.188       0.0727   2.59    0.00972 consc_comb_curr 
 5 remained  0.171       0.0837   2.04    0.0415  aesth_comb_curr 
 6 remained  0.169       0.0867   1.95    0.0512  concept         
 7 remained  0.140       0.0699   2.00    0.0458  respe_comb_curr 
 8 remained  0.127       0.0873   1.45    0.147   produ_comb_curr 
 9 remained  0.0835      0.0557   1.50    0.134   organ_comb_ideal
10 remained  0.0814      0.0855   0.952   0.341   selfes          
11 remained  0.0730      0.0627   1.16    0.245   openn_comb_curr 
12 remained  0.0701      0.0707   0.992   0.322   aesth_comb_ideal
13 remained -0.0688      0.0435  -1.58    0.114   notemployed     
14 remained -0.0656      0.0990  -0.663   0.508   socia_comb_curr 
15 remained  0.0656      0.0688   0.953   0.341   compa_comb_ideal
16 remained -0.0602      0.0987  -0.610   0.542   depre_comb_curr 
17 remained  0.0568      0.113    0.502   0.616   meaning         
18 remained  0.0567      0.0726   0.781   0.435   compa_comb_curr 
19 remained -0.0510      0.0820  -0.621   0.535   trust_comb_curr 
20 remained -0.0485      0.0570  -0.851   0.395   respe_comb_ideal
21 remained  0.0484      0.0590   0.820   0.412   agree_comb_curr 
22 remained  0.0471      0.0794   0.592   0.554   imagi_comb_curr 
23 remained  0.0466      0.0840   0.555   0.579   energ_comb_curr 
24 remained  0.0434      0.0417   1.04    0.298   black           
25 remained -0.0430      0.0519  -0.827   0.408   student         
26 remained -0.0382      0.0611  -0.625   0.532   energ_comb_ideal
27 remained  0.0337      0.0878   0.384   0.701   anxie_comb_curr 
28 remained -0.0330      0.0609  -0.541   0.589   volat_comb_ideal
29 remained  0.0329      0.0681   0.483   0.629   socia_comb_ideal
30 remained -0.0326      0.0868  -0.375   0.707   asser_comb_curr 
31 remained  0.0316      0.0478   0.660   0.509   consc_comb_ideal
32 remained -0.0315      0.0546  -0.578   0.564   depre_comb_ideal
33 remained  0.0290      0.0527   0.550   0.582   fulltime        
34 remained  0.0282      0.101    0.281   0.779   volat_comb_curr 
35 remained -0.0273      0.0659  -0.414   0.679   asser_comb_ideal
36 remained  0.0237      0.0560   0.424   0.672   openn_comb_ideal
37 remained  0.0225      0.0692   0.326   0.745   curio_comb_ideal
38 remained  0.0200      0.0965   0.207   0.836   swls            
39 remained  0.0185      0.0627   0.294   0.769   anxie_comb_ideal
40 remained  0.0180      0.0395   0.457   0.648   parttime        
41 remained -0.0172      0.0709  -0.242   0.809   extra_comb_curr 
42 remained  0.0154      0.0712   0.216   0.829   trust_comb_ideal
43 remained -0.0146      0.0494  -0.295   0.768   neuro_comb_ideal
44 remained -0.0126      0.0462  -0.273   0.785   white           
45 remained -0.0120      0.0659  -0.182   0.856   imagi_comb_ideal
46 remained -0.0110      0.0482  -0.227   0.820   extra_comb_ideal
47 remained  0.0104      0.0535   0.194   0.847   agree_comb_ideal
48 remained  0.00854     0.0485   0.176   0.860   female          
49 remained  0.00853     0.0536   0.159   0.874   produ_comb_ideal
50 remained  0.00701     0.0626   0.112   0.911   respo_comb_ideal
51 remained  0.00139     0.0749   0.0185  0.985   curio_comb_curr 
52 remained  0.000380    0.0836   0.00455 0.996   neuro_comb_curr 

5.6.2 From T2 to T3

Do participants who only took part in T1 differ from those taking part in T1 and T2?

Determine groups of “remainers” vs. “drop-outs” and run analyses:

Show the code
attrition_sample_2 <- df_sbsa2 %>% 
  filter(time %in% c(2:3)) %>% 
  group_by(pid) %>% mutate(last_time = max(time)) %>% ungroup() %>% 
  filter(time==2) %>% 
  select(pid, last_time, 
         contains("_comb_"), c("swls", "meaning", "selfes", "concept"), # outcomes
         gender, age, ethnicity, student, employed) %>% # demographics
  mutate(remained = last_time - 2,
         female = if_else(gender=="Female", 1, 0, NA_real_),
         white = if_else(ethnicity=="White", 1, 0, NA_real_),
         black = if_else(ethnicity=="Black", 1, 0, NA_real_),
         student = if_else(student=="Yes", 1, 0, NA_real_),
         fulltime = if_else(employed=="Full-Time", 1, 0, NA_real_),
         parttime = if_else(employed=="Part-Time", 1, 0, NA_real_),
         notemployed = if_else(employed=="Unemployed (and job seeking)" | 
                                 employed=="Not in paid work (e.g. homemaker', 'retired or disabled)" | 
                                 employed=="Due to start a new job within the next month", 1, 0, NA_real_),) %>% 
  select(-c(last_time, na_comb_curr, na_comb_ideal, gender, ethnicity, employed))

attrition_analysis_2 <- colnames(attrition_sample_2) %>%                                # Start with all column names
    setdiff( c("pid", "remained" ) ) %>%                 # ...that are not Sepal.Length
    rlang::syms() %>%                             # Convert them to symbols
    map( ~rlang::expr(lm(!!.x ~ remained,
                         data=attrition_sample_2)) ) %>%        # Create expressions
    map( eval.parent ) %>%                        # Evaluate expressions
    map( broom::tidy ) %>%                        # Tidy up the output
    bind_rows() %>%                               # Combine into a single data frame
    filter( term != "(Intercept)" ) %>%                # Drop all (Intercept) entries
    mutate(outcome = colnames(attrition_sample_2) %>% setdiff( c("pid", "remained" ) ))

Display significant differences:

attrition_analysis_2 %>% filter(p.value < .05) %>% arrange(desc(abs(estimate)))
# A tibble: 7 × 6
  term     estimate std.error statistic p.value outcome         
  <chr>       <dbl>     <dbl>     <dbl>   <dbl> <chr>           
1 remained    2.59     1.11        2.35 0.0192  age             
2 remained    0.261    0.109       2.39 0.0169  organ_comb_curr 
3 remained    0.209    0.0664      3.15 0.00172 organ_comb_ideal
4 remained    0.188    0.0871      2.16 0.0309  consc_comb_curr 
5 remained    0.158    0.0582      2.71 0.00696 consc_comb_ideal
6 remained    0.154    0.0634      2.43 0.0154  produ_comb_ideal
7 remained    0.153    0.0727      2.11 0.0353  imagi_comb_ideal
effectsize::cohens_d(age ~ remained, data = attrition_sample_2)
Cohen's d |         95% CI
--------------------------
-0.27     | [-0.49, -0.04]

- Estimated using pooled SD.
effectsize::cohens_d(organ_comb_curr ~ remained, data = attrition_sample_2)
Cohen's d |         95% CI
--------------------------
-0.27     | [-0.50, -0.05]

- Estimated using pooled SD.
effectsize::cohens_d(organ_comb_ideal ~ remained, data = attrition_sample_2)
Cohen's d |         95% CI
--------------------------
-0.36     | [-0.58, -0.13]

- Estimated using pooled SD.
effectsize::cohens_d(consc_comb_curr ~ remained, data = attrition_sample_2)
Cohen's d |         95% CI
--------------------------
-0.25     | [-0.47, -0.02]

- Estimated using pooled SD.
effectsize::cohens_d(consc_comb_ideal ~ remained, data = attrition_sample_2)
Cohen's d |         95% CI
--------------------------
-0.31     | [-0.53, -0.08]

- Estimated using pooled SD.
effectsize::cohens_d(produ_comb_ideal ~ remained, data = attrition_sample_2)
Cohen's d |         95% CI
--------------------------
-0.28     | [-0.50, -0.05]

- Estimated using pooled SD.
effectsize::cohens_d(imagi_comb_ideal ~ remained, data = attrition_sample_2)
Cohen's d |         95% CI
--------------------------
-0.24     | [-0.47, -0.02]

- Estimated using pooled SD.

Show all results:

attrition_analysis_2 %>% arrange(desc(abs(estimate))) %>% print(n=200)
# A tibble: 52 × 6
   term     estimate std.error statistic p.value outcome         
   <chr>       <dbl>     <dbl>     <dbl>   <dbl> <chr>           
 1 remained  2.59       1.11     2.35    0.0192  age             
 2 remained  0.261      0.109    2.39    0.0169  organ_comb_curr 
 3 remained  0.209      0.0664   3.15    0.00172 organ_comb_ideal
 4 remained  0.191      0.103    1.86    0.0626  produ_comb_curr 
 5 remained  0.188      0.0871   2.16    0.0309  consc_comb_curr 
 6 remained  0.184      0.132    1.40    0.163   meaning         
 7 remained  0.159      0.0809   1.96    0.0505  curio_comb_ideal
 8 remained  0.158      0.0582   2.71    0.00696 consc_comb_ideal
 9 remained  0.154      0.0634   2.43    0.0154  produ_comb_ideal
10 remained  0.153      0.0727   2.11    0.0353  imagi_comb_ideal
11 remained  0.147      0.0783   1.88    0.0605  respe_comb_curr 
12 remained  0.113      0.0634   1.79    0.0739  openn_comb_ideal
13 remained  0.111      0.0924   1.20    0.230   respo_comb_curr 
14 remained -0.0973     0.0742  -1.31    0.190   anxie_comb_ideal
15 remained  0.0884     0.0667   1.33    0.186   agree_comb_curr 
16 remained -0.0848     0.0469  -1.81    0.0714  parttime        
17 remained -0.0846     0.0611  -1.38    0.167   depre_comb_ideal
18 remained -0.0771     0.0569  -1.35    0.176   neuro_comb_ideal
19 remained  0.0759     0.0664   1.14    0.253   respe_comb_ideal
20 remained -0.0730     0.110   -0.662   0.508   socia_comb_curr 
21 remained  0.0725     0.0712   1.02    0.309   energ_comb_ideal
22 remained  0.0658     0.0839   0.784   0.434   compa_comb_curr 
23 remained -0.0605     0.0618  -0.978   0.328   student         
24 remained  0.0553     0.0913   0.606   0.544   imagi_comb_curr 
25 remained  0.0521     0.0932   0.559   0.576   trust_comb_curr 
26 remained -0.0507     0.0742  -0.683   0.495   volat_comb_ideal
27 remained  0.0501     0.102    0.490   0.624   concept         
28 remained -0.0488     0.0788  -0.620   0.536   compa_comb_ideal
29 remained  0.0425     0.0745   0.571   0.568   respo_comb_ideal
30 remained  0.0411     0.0841   0.489   0.625   aesth_comb_ideal
31 remained -0.0397     0.0768  -0.518   0.605   asser_comb_ideal
32 remained -0.0366     0.0805  -0.455   0.649   extra_comb_curr 
33 remained -0.0357     0.116   -0.308   0.758   swls            
34 remained  0.0328     0.0505   0.650   0.516   notemployed     
35 remained  0.0316     0.0733   0.431   0.667   openn_comb_curr 
36 remained -0.0313     0.0980  -0.320   0.749   selfes          
37 remained  0.0306     0.0543   0.564   0.573   white           
38 remained  0.0267     0.0971   0.275   0.783   aesth_comb_curr 
39 remained  0.0248     0.0834   0.297   0.766   trust_comb_ideal
40 remained -0.0247     0.0494  -0.500   0.617   black           
41 remained  0.0236     0.0611   0.387   0.699   agree_comb_ideal
42 remained -0.0196     0.0980  -0.200   0.841   asser_comb_curr 
43 remained -0.0175     0.103   -0.171   0.864   anxie_comb_curr 
44 remained -0.0167     0.0962  -0.173   0.862   energ_comb_curr 
45 remained  0.0140     0.0622   0.225   0.822   fulltime        
46 remained  0.0119     0.0876   0.136   0.892   curio_comb_curr 
47 remained  0.00979    0.0569   0.172   0.864   female          
48 remained -0.00918    0.0961  -0.0955  0.924   neuro_comb_curr 
49 remained -0.00892    0.111   -0.0802  0.936   volat_comb_curr 
50 remained  0.00781    0.0824   0.0948  0.924   socia_comb_ideal
51 remained  0.00677    0.0573   0.118   0.906   extra_comb_ideal
52 remained -0.00111    0.113   -0.00978 0.992   depre_comb_curr 

5.7 Standard deviations (for later standardization)

Personality

sd_pers_st2 <- df_sbsa2 %>% 
  select(pid, time, rando, contains("_comb_"), -c(na_comb_curr, na_comb_ideal)) %>% 
  pivot_longer(-c(pid, time, rando), 
               cols_vary = "slowest",
               names_to = c("trait", "reference"),
               names_pattern = "(.*)_(.*)",
               values_to = "score") %>% 
  mutate(trait = gsub("_comb", "", trait),
         reference = ifelse(reference=="curr", "current", reference)) %>% 
  left_join(tibble(long = str_to_title(names(b5_vars)), trait = str_trunc(names(b5_vars), 5, ellipsis = ""))) %>% 
  filter(!is.na(score)) %>% 
  group_by(long, trait, reference, time) %>% 
  summarise(n = n(), m_trait = mean(score), sd_trait = sd(score)) %>% 
  ungroup()

Well-being

sd_wb_st2 <- df_sbsa2 %>% 
  select(pid, time, rando, swls, meaning, selfes, concept) %>% 
  pivot_longer(-c(pid, time, rando), 
               cols_vary = "slowest",
               names_to = c("trait"),
               values_to = "score") %>% 
  mutate(long = case_when(trait=="swls" ~ "Life Satisfaction", trait=="meaning" ~ "Meaning in Life", 
                           trait=="selfes" ~ "Self-Esteem", trait=="concept" ~ "Self-Concept Clarity")) %>% 
  filter(!is.na(score)) %>% 
  group_by(long, trait, time) %>% 
  summarise(n = n(), m_trait = mean(score), sd_trait = sd(score)) %>% 
  ungroup()

6 Confirmatory results

6.1 H1: Well-being - similarity correlations (H4 in paper)

All four psychological well-being indicators will be positively correlated with a greater similarity between current- and ideal personality-ratings of personality.

To examine this at the level of overall profiles, we will compute the correlations between the psychological well-being indicators and the Fisher z transformed correlations between the facet- and item-level real-ideal personality-profiles. To examine this at the level of individual traits, we will compute the correlation between psychological well-being indicators and the squared difference between current- and ideal-personality rating for each Big Five trait and facet.

6.1.1 Profile similarity

Only in the intervention groups (without the waitlist control group).

Computations:

Show the code
cormat_profile <- cor((df_sbsa2 %>% filter(rando!="Waitlist-Control"))[, c("swls", "meaning", "selfes", "concept",
                                  "profile_corr_item_z", "profile_corr_facet_z")], use = "pairwise.complete.obs")

rownames(cormat_profile) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")
colnames(cormat_profile) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")
corrplot(cormat_profile, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

Positive correlations of well-being indicators with profile similarity between current personality and ideal personality personality. Especially high correlation with self-esteem. High congruence of item-level and facet-level profile similarity.

As a table with confidence intervals - profile similarity:

Show the code
bind_rows(
  bind_cols(
  cormat_profile[5, c(1:4)] %>% as_tibble() %>% 
    mutate(wellbeing = c("swls", "meaning", "selfes", "concept"),
           profile_sim = rep("item-level", 4)) %>% 
    select(profile_sim, wellbeing, corr = value),
  correlation::cor_to_ci(cormat_profile[5, c(1:4)], n = (df_sbsa2 %>% filter(!is.na(swls) & rando!="Waitlist-Control") 
                                        %>% tally() %>% pull()), ci = 0.999) %>% as_tibble(),
  correlation::cor_to_p(cormat_profile[5, c(1:4)], n = (df_sbsa2 %>% filter(!is.na(swls) & rando!="Waitlist-Control") 
                                      %>% tally() %>% pull())) %>% as_tibble() %>% select(p) 
  ),
bind_cols(
  cormat_profile[6, c(1:4)] %>% as_tibble() %>% 
    mutate(wellbeing = c("swls", "meaning", "selfes", "concept"),
           profile_sim = rep("facet-level", 4)) %>% 
    select(profile_sim, wellbeing, corr = value),
  correlation::cor_to_ci(cormat_profile[6, c(1:4)], n = (df_sbsa2 %>% filter(!is.na(swls) & rando!="Waitlist-Control") 
                                        %>% tally() %>% pull()), ci = 0.999) %>% as_tibble(),
  correlation::cor_to_p(cormat_profile[6, c(1:4)], n = (df_sbsa2 %>% filter(!is.na(swls) & rando!="Waitlist-Control") 
                                      %>% tally() %>% pull())) %>% as_tibble() %>% select(p)
  )
) %>% kable(digits = 3)
profile_sim wellbeing corr CI_low CI_high p
item-level swls 0.477 0.414 0.535 0
item-level meaning 0.428 0.361 0.489 0
item-level selfes 0.642 0.593 0.685 0
item-level concept 0.555 0.498 0.607 0
facet-level swls 0.472 0.409 0.530 0
facet-level meaning 0.429 0.363 0.491 0
facet-level selfes 0.643 0.594 0.686 0
facet-level concept 0.559 0.503 0.611 0
6.1.1.1 Change in this relation over time and across intervention groups

Computations:

Show the code
# T1
cormat_profile_sb_t1 <- cor((df_sbsa2 %>% filter(rando=="Self-Improvement" & time==1))[, c("swls", "meaning", "selfes", "concept",                                  "profile_corr_item_z", "profile_corr_facet_z")], use = "pairwise.complete.obs")
rownames(cormat_profile_sb_t1) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")
colnames(cormat_profile_sb_t1) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")

cormat_profile_sa_t1 <- cor((df_sbsa2 %>% filter(rando=="Self-Acceptance" & time==1))[, c("swls", "meaning", "selfes", "concept",                                  "profile_corr_item_z", "profile_corr_facet_z")], use = "pairwise.complete.obs")
rownames(cormat_profile_sa_t1) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")
colnames(cormat_profile_sa_t1) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")

# T2
cormat_profile_sb_t2 <- cor((df_sbsa2 %>% filter(rando=="Self-Improvement" & time==2))[, c("swls", "meaning", "selfes", "concept",                                  "profile_corr_item_z", "profile_corr_facet_z")], use = "pairwise.complete.obs")
rownames(cormat_profile_sb_t2) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")
colnames(cormat_profile_sb_t2) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")

cormat_profile_sa_t2 <- cor((df_sbsa2 %>% filter(rando=="Self-Acceptance" & time==2))[, c("swls", "meaning", "selfes", "concept",                                  "profile_corr_item_z", "profile_corr_facet_z")], use = "pairwise.complete.obs")
rownames(cormat_profile_sa_t2) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")
colnames(cormat_profile_sa_t2) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")

# T3
cormat_profile_sb_t3 <- cor((df_sbsa2 %>% filter(rando=="Self-Improvement" & time==3))[, c("swls", "meaning", "selfes", "concept",                                  "profile_corr_item_z", "profile_corr_facet_z")], use = "pairwise.complete.obs")
rownames(cormat_profile_sb_t3) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")
colnames(cormat_profile_sb_t3) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")

cormat_profile_sa_t3 <- cor((df_sbsa2 %>% filter(rando=="Self-Acceptance" & time==3))[, c("swls", "meaning", "selfes", "concept",                                  "profile_corr_item_z", "profile_corr_facet_z")], use = "pairwise.complete.obs")
rownames(cormat_profile_sa_t3) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")
colnames(cormat_profile_sa_t3) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")

T1

First assessment: Self-improvement group

corrplot(cormat_profile_sb_t1, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

First assessment: Self-acceptance group

corrplot(cormat_profile_sa_t1, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

T2
Second assessment: Self-improvement group

corrplot(cormat_profile_sb_t2, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

Second assessment: Self-acceptance group

corrplot(cormat_profile_sa_t2, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

T3
Third assessment: Self-improvement group

corrplot(cormat_profile_sb_t3, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

Third assessment: Self-acceptance group

corrplot(cormat_profile_sa_t3, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

No pronounced differences across time or groups.

6.1.2 Individual traits: squared differences

Only in the intervention groups (without the waitlist control group).

Computations:

Show the code
cormat_sqtraits <- cor((df_sbsa2 %>% filter(rando!="Waitlist-Control"))[, c("swls", "meaning", "selfes", "concept",
                                   paste0(str_trunc(names(b5_vars)[1:5], 5, ellipsis = ""), "_sqdiff"))], 
                       use = "pairwise.complete.obs")

rownames(cormat_sqtraits) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))
colnames(cormat_sqtraits) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))

cormat_sqfacets <- cor(df_sbsa2[, c("swls", "meaning", "selfes", "concept",
                                   paste0(str_trunc(names(b5_vars)[6:20], 5, ellipsis = ""), "_sqdiff"))], 
                       use = "pairwise.complete.obs")

rownames(cormat_sqfacets) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[6:20]))
colnames(cormat_sqfacets) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[6:20]))

Big Five traits

corrplot(cormat_sqtraits, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
         addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

As a table with confidence intervals - squared differences:

Show the code
cormat_sqtraits[c(5:9), c(1:4)] %>% as_tibble() %>% 
    mutate(personality = names(b5_vars)[1:5]) %>% 
    rename(swls = `Life Satisfaction`, meaning = `Meaning in Life`, 
           selfes = `Self-Esteem`, concept = `Self Concept Clarity`) %>% 
    pivot_longer(1:4, names_to = "wellbeing", values_to = "corr") %>% 
    mutate(CI_low = correlation::cor_to_ci(corr, n = (df_sbsa2 %>% 
                                                        filter(!is.na(swls) & rando!="Waitlist-Control") 
                                        %>% tally() %>% pull()), ci = 0.999) %>% 
             as_tibble() %>% pull(CI_low),
           CI_high = correlation::cor_to_ci(corr, n = (df_sbsa2 %>% 
                                                        filter(!is.na(swls) & rando!="Waitlist-Control") 
                                        %>% tally() %>% pull()), ci = 0.999) %>% 
             as_tibble() %>% pull(CI_high),
           p = correlation::cor_to_p(corr, n = (df_sbsa2 %>% 
                                                        filter(!is.na(swls) & rando!="Waitlist-Control") 
                                        %>% tally() %>% pull())) %>% 
             as_tibble() %>% pull(p)) %>% 
  kable(digits = 3)
personality wellbeing corr CI_low CI_high p
extraversion swls -0.394 -0.458 -0.326 0
extraversion meaning -0.375 -0.440 -0.305 0
extraversion selfes -0.445 -0.506 -0.380 0
extraversion concept -0.321 -0.389 -0.249 0
agreeableness swls -0.162 -0.237 -0.085 0
agreeableness meaning -0.157 -0.233 -0.080 0
agreeableness selfes -0.241 -0.314 -0.166 0
agreeableness concept -0.241 -0.313 -0.166 0
conscientiousness swls -0.312 -0.381 -0.240 0
conscientiousness meaning -0.257 -0.329 -0.183 0
conscientiousness selfes -0.364 -0.430 -0.294 0
conscientiousness concept -0.314 -0.383 -0.241 0
neuroticism swls -0.372 -0.438 -0.303 0
neuroticism meaning -0.372 -0.438 -0.303 0
neuroticism selfes -0.526 -0.581 -0.467 0
neuroticism concept -0.425 -0.487 -0.359 0
openness swls -0.106 -0.183 -0.028 0
openness meaning -0.121 -0.197 -0.043 0
openness selfes -0.185 -0.260 -0.109 0
openness concept -0.128 -0.204 -0.050 0

Big Five facets

corrplot(cormat_sqfacets, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
         addCoef.col ='black', number.cex = 0.6, diag = FALSE) # also add numbers

Here we see negative correlations of well-being indicators with squared trait- and facet-level mean-score differences between current personality and ideal personality personality. Especially pronounced negative correlations for neuroticism, extraversion, and conscientiousness (in that order). On the facet-level, we see that depression is the facet with the highest correlation of its squared difference with well-being, followed by energy. Within conscientiousness, productiveness has the strongest correlation.

6.1.2.1 Change in this relation over time and across intervention groups

Only looking at the trait level for now!

Computations:

Show the code
# T1
cormat_sqtraits_sb_t1 <- cor((df_sbsa2 %>% filter(rando=="Self-Improvement" & time==1))[, c("swls", "meaning", "selfes", "concept",
                                   paste0(str_trunc(names(b5_vars)[1:5], 5, ellipsis = ""), "_sqdiff"))], 
                       use = "pairwise.complete.obs")
rownames(cormat_sqtraits_sb_t1) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))
colnames(cormat_sqtraits_sb_t1) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))

cormat_sqtraits_sa_t1 <- cor((df_sbsa2 %>% filter(rando=="Self-Acceptance" & time==1))[, c("swls", "meaning", "selfes", "concept",
                                   paste0(str_trunc(names(b5_vars)[1:5], 5, ellipsis = ""), "_sqdiff"))], 
                       use = "pairwise.complete.obs")
rownames(cormat_sqtraits_sa_t1) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))
colnames(cormat_sqtraits_sa_t1) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))

# T2
cormat_sqtraits_sb_t2 <- cor((df_sbsa2 %>% filter(rando=="Self-Improvement" & time==2))[, c("swls", "meaning", "selfes", "concept",
                                   paste0(str_trunc(names(b5_vars)[1:5], 5, ellipsis = ""), "_sqdiff"))], 
                       use = "pairwise.complete.obs")
rownames(cormat_sqtraits_sb_t2) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))
colnames(cormat_sqtraits_sb_t2) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))

cormat_sqtraits_sa_t2 <- cor((df_sbsa2 %>% filter(rando=="Self-Acceptance" & time==2))[, c("swls", "meaning", "selfes", "concept",
                                   paste0(str_trunc(names(b5_vars)[1:5], 5, ellipsis = ""), "_sqdiff"))], 
                       use = "pairwise.complete.obs")
rownames(cormat_sqtraits_sa_t2) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))
colnames(cormat_sqtraits_sa_t2) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))

# T3
cormat_sqtraits_sb_t3 <- cor((df_sbsa2 %>% filter(rando=="Self-Improvement" & time==3))[, c("swls", "meaning", "selfes", "concept",
                                   paste0(str_trunc(names(b5_vars)[1:5], 5, ellipsis = ""), "_sqdiff"))], 
                       use = "pairwise.complete.obs")
rownames(cormat_sqtraits_sb_t3) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))
colnames(cormat_sqtraits_sb_t3) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))

cormat_sqtraits_sa_t3 <- cor((df_sbsa2 %>% filter(rando=="Self-Acceptance" & time==3))[, c("swls", "meaning", "selfes", "concept",
                                   paste0(str_trunc(names(b5_vars)[1:5], 5, ellipsis = ""), "_sqdiff"))], 
                       use = "pairwise.complete.obs")
rownames(cormat_sqtraits_sa_t3) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))
colnames(cormat_sqtraits_sa_t3) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))

T1

First assessment: Self-improvement group

corrplot(cormat_sqtraits_sb_t1, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

First assessment: Self-acceptance group

corrplot(cormat_sqtraits_sa_t1, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

High similarity at T1.

T2
Second assessment: Self-improvement group

corrplot(cormat_sqtraits_sb_t2, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

Second assessment: Self-acceptance group

corrplot(cormat_sqtraits_sa_t2, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

At T2, attenuated correlations for agreeableness and (to a lesser degree) conscientiousness in the self-improvement group compared to T1.

T3
Third assessment: Self-improvement group

corrplot(cormat_sqtraits_sb_t3, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

Third assessment: Self-acceptance group

corrplot(cormat_sqtraits_sa_t3, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

At T3, slightly lower correlations for neuroticism in the self-acceptance group (compared to the self-improvement group). But only small difference.

6.1.2.2 Exploratory: Controlling for initial trait levels

Additional, exploratory analysis: Are the relationships of the squared trait differences with well-being similar when we control for initial trait levels (at T1)?

Example with extraversion:

cor(df_sbsa2 %>% filter(rando!="Waitlist-Control" & time==1) %>% pull(swls), 
    df_sbsa2 %>% filter(rando!="Waitlist-Control" & time==1) %>% pull(extra_sqdiff), 
    use = "pairwise.complete.obs") %>% round(2)
[1] -0.38
# basic model to replicate the correlation
mod_ex_1 <- lm(swls ~ extra_sqdiff, data = df_sbsa2 %>% filter(rando!="Waitlist-Control" & time==1))
summary(mod_ex_1)$coef
               Estimate Std. Error   t value      Pr(>|t|)
(Intercept)   3.0767166 0.04770753  64.49122 8.286778e-290
extra_sqdiff -0.1877679 0.01767740 -10.62192  1.821543e-24
effectsize::standardize_parameters(mod_ex_1)
# Standardization method: refit

Parameter    | Std. Coef. |         95% CI
------------------------------------------
(Intercept)  |   9.13e-16 | [-0.07,  0.07]
extra_sqdiff |      -0.38 | [-0.45, -0.31]
# adjusted model controlling for initial trait level
mod_ex_2 <- lm(swls ~ extra_sqdiff + extra_comb_curr, 
               data = df_sbsa2 %>% filter(rando!="Waitlist-Control" & time==1))
summary(mod_ex_2)$coef
                   Estimate Std. Error   t value     Pr(>|t|)
(Intercept)      1.91350186 0.23355736  8.192856 1.294315e-15
extra_sqdiff    -0.09460717 0.02524177 -3.748040 1.935991e-04
extra_comb_curr  0.35295712 0.06942857  5.083745 4.807365e-07
effectsize::standardize_parameters(mod_ex_2)
# Standardization method: refit

Parameter       | Std. Coef. |         95% CI
---------------------------------------------
(Intercept)     |   9.58e-16 | [-0.07,  0.07]
extra_sqdiff    |      -0.19 | [-0.29, -0.09]
extra_comb_curr |       0.26 | [ 0.16,  0.36]

Reduced correlation (effect size) in the adjusted model but still significant.

Only T1:

Show the code
# prepare df
df_check_adjusted <- df_sbsa2 %>% 
  # reshape with well-being outcomes and current trait levels
  filter(rando!="Waitlist-Control" & time==1) %>% 
  select(pid, rando, 
         swls, meaning, selfes, concept,
         paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_comb_curr")) %>% 
  pivot_longer(ends_with("_comb_curr"), 
               names_to = "test", names_prefix = "facet", values_to = "initial", values_drop_na = TRUE) %>% 
  mutate(test = sub("_.*", "", test)) %>% 
  left_join(
    df_sbsa2 %>% 
    # reshape with squared differences -> add to previous
      filter(rando!="Waitlist-Control" & time==1) %>% 
      select(pid, rando, ends_with("_sqdiff")) %>% 
      pivot_longer(ends_with("_sqdiff"), 
                   names_to = "test", names_prefix = "facet", values_to = "score", values_drop_na = TRUE) %>% 
      mutate(test = sub("_.*", "", test))
  )

# run models 
# swls
df_check_adjusted_swls <- df_check_adjusted %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lm(score ~ swls + initial, data = .x))) %>% 
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_swls_unlist <- as.data.frame(summary(df_check_adjusted_swls[[1]])$coefficients) %>% as_tibble() %>% 
  mutate(d = effectsize::standardize_parameters(df_check_adjusted_swls[[1]])$Std_Coefficient) # standardized beta
for (i in 2:length(df_check_adjusted_swls)) {
  df_check_adjusted_swls_unlist <- 
    bind_rows(df_check_adjusted_swls_unlist, 
              as.data.frame(summary(df_check_adjusted_swls[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_swls[[i]])$Std_Coefficient))
}
df_check_adjusted_swls_unlist <- df_check_adjusted_swls_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "swls", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

# meaning
df_check_adjusted_meaning <- df_check_adjusted %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lm(score ~ meaning + initial, data = .x))) %>% 
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_meaning_unlist <- as.data.frame(summary(df_check_adjusted_meaning[[1]])$coefficients) %>% as_tibble() %>% 
  mutate(d = effectsize::standardize_parameters(df_check_adjusted_meaning[[1]])$Std_Coefficient) # standardized beta
for (i in 2:length(df_check_adjusted_meaning)) {
  df_check_adjusted_meaning_unlist <- 
    bind_rows(df_check_adjusted_meaning_unlist, 
              as.data.frame(summary(df_check_adjusted_meaning[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_meaning[[i]])$Std_Coefficient))
}
df_check_adjusted_meaning_unlist <- df_check_adjusted_meaning_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "meaning", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

# selfes
df_check_adjusted_selfes <- df_check_adjusted %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lm(score ~ selfes + initial, data = .x))) %>% 
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_selfes_unlist <- as.data.frame(summary(df_check_adjusted_selfes[[1]])$coefficients) %>% as_tibble() %>% 
  mutate(d = effectsize::standardize_parameters(df_check_adjusted_selfes[[1]])$Std_Coefficient) # standardized beta
for (i in 2:length(df_check_adjusted_selfes)) {
  df_check_adjusted_selfes_unlist <- 
    bind_rows(df_check_adjusted_selfes_unlist, 
              as.data.frame(summary(df_check_adjusted_selfes[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_selfes[[i]])$Std_Coefficient))
}
df_check_adjusted_selfes_unlist <- df_check_adjusted_selfes_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "selfes", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

# concept
df_check_adjusted_concept <- df_check_adjusted %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lm(score ~ concept + initial, data = .x))) %>% 
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_concept_unlist <- as.data.frame(summary(df_check_adjusted_concept[[1]])$coefficients) %>% as_tibble() %>% 
  mutate(d = effectsize::standardize_parameters(df_check_adjusted_concept[[1]])$Std_Coefficient) # standardized beta
for (i in 2:length(df_check_adjusted_concept)) {
  df_check_adjusted_concept_unlist <- 
    bind_rows(df_check_adjusted_concept_unlist, 
              as.data.frame(summary(df_check_adjusted_concept[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_concept[[i]])$Std_Coefficient))
}
df_check_adjusted_concept_unlist <- df_check_adjusted_concept_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "concept", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

Does the relationship between the squared difference in one trait (current vs. ideal) and well-being aspects still hold if we control for the initial trait level?

Combine as one table:

kable(df_check_adjusted_swls_unlist %>% 
        filter(!term %in% c("Intercept", "initial")) %>% 
        select(outcome, d_swls = d, p_ls = p, sig_ls = sig) %>% 
        left_join(
          df_check_adjusted_meaning_unlist %>% 
            filter(!term %in% c("Intercept", "initial")) %>% 
            select(outcome, d_meaning = d, p_m = p, sig_m = sig)
        ) %>% 
          left_join(
            df_check_adjusted_selfes_unlist %>% 
              filter(!term %in% c("Intercept", "initial")) %>% 
              select(outcome, d_selfes = d, p_se = p, sig_se = sig)
          ) %>% 
          left_join(
            df_check_adjusted_concept_unlist %>% 
              filter(!term %in% c("Intercept", "initial")) %>% 
              select(outcome, d_concept = d, p_c = p, sig_c = sig)
          ), 
       digits = 3)
outcome d_swls p_ls sig_ls d_meaning p_m sig_m d_selfes p_se sig_se d_concept p_c sig_c
extraversion -0.107 0.000 *** -0.138 0.000 *** -0.089 0.005 ** -0.089 0.002 **
agreeableness -0.117 0.001 *** -0.127 0.000 *** -0.164 0.000 *** -0.190 0.000 ***
conscientiousness -0.092 0.001 *** -0.078 0.003 ** -0.076 0.007 ** -0.052 0.056
neuroticism -0.035 0.138 -0.056 0.018 * -0.045 0.107 -0.005 0.843
openness -0.081 0.017 * -0.108 0.001 ** -0.099 0.004 ** -0.098 0.004 **
sociability -0.109 0.000 *** -0.136 0.000 *** -0.102 0.001 ** -0.082 0.006 **
assertiveness -0.084 0.005 ** -0.107 0.000 *** -0.029 0.370 -0.105 0.001 ***
energy -0.083 0.006 ** -0.099 0.001 *** -0.111 0.001 *** -0.079 0.007 **
compassion -0.085 0.019 * -0.060 0.096 -0.107 0.003 ** -0.149 0.000 ***
respectfulness -0.072 0.026 * -0.094 0.004 ** -0.104 0.002 ** -0.100 0.002 **
trust -0.062 0.063 -0.089 0.008 ** -0.098 0.004 ** -0.136 0.000 ***
organization -0.067 0.011 * -0.070 0.007 ** -0.049 0.066 -0.051 0.055
productiveness -0.063 0.008 ** -0.061 0.011 * -0.045 0.073 -0.057 0.021 *
responsibility -0.135 0.000 *** -0.109 0.000 *** -0.134 0.000 *** -0.092 0.004 **
anxiety -0.032 0.197 -0.028 0.251 -0.034 0.203 0.011 0.669
depression -0.048 0.044 * -0.066 0.006 ** -0.068 0.021 * -0.010 0.670
volatility -0.068 0.006 ** -0.102 0.000 *** -0.077 0.004 ** -0.063 0.018 *
curiosity -0.114 0.001 *** -0.120 0.000 *** -0.096 0.004 ** -0.124 0.000 ***
aesthetic -0.009 0.801 -0.096 0.007 ** -0.044 0.223 -0.085 0.018 *
imagination -0.084 0.005 ** -0.107 0.000 *** -0.104 0.001 *** -0.070 0.021 *

Effects mostly still significant but not always at the p < .001 level. Correlation is especially stongly reduced for neuroticism and its facets depression and anxiety. Effects are still relatively pronounced for extraversion (strongest for sociability) and conscientiousness (strongest for responsibility). Volatility facet from neuroticism also shows comparatively strong effects.

Across all time points, using a mixed model:

Show the code
# prepare df
df_check_adjusted_all <- df_sbsa2 %>% 
  # reshape with well-being outcomes and current trait levels
  filter(rando!="Waitlist-Control") %>% 
  select(pid, rando, time,
         swls, meaning, selfes, concept,
         paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_sqdiff")) %>% 
  pivot_longer(ends_with("_sqdiff"), 
               names_to = "test", names_prefix = "facet", values_to = "score", values_drop_na = TRUE) %>% 
  mutate(test = sub("_.*", "", test)) %>% 
  left_join(
    df_sbsa2 %>% 
    # reshape with squared differences -> add to previous
      filter(rando!="Waitlist-Control" & time==1) %>% 
      select(pid, rando, ends_with("_comb_curr")) %>% 
      pivot_longer(ends_with("_comb_curr"), 
                   names_to = "test", names_prefix = "facet", values_to = "initial", values_drop_na = TRUE) %>% 
      mutate(test = sub("_.*", "", test))
  )

# run models 
# swls
df_check_adjusted_swls_all <- df_check_adjusted_all %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lmerTest::lmer(score ~ swls + initial + (1 | pid), data = .x))) %>% # random intercept model
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_swls_all_unlist <- as.data.frame(summary(df_check_adjusted_swls_all[[1]])$coefficients) %>% as_tibble() %>% 
  mutate(d = effectsize::standardize_parameters(df_check_adjusted_swls_all[[1]])$Std_Coefficient) # standardized beta
for (i in 2:length(df_check_adjusted_swls_all)) {
  df_check_adjusted_swls_all_unlist <- 
    bind_rows(df_check_adjusted_swls_all_unlist, 
              as.data.frame(summary(df_check_adjusted_swls_all[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_swls_all[[i]])$Std_Coefficient))
}
df_check_adjusted_swls_all_unlist <- df_check_adjusted_swls_all_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "swls", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

# meaning
df_check_adjusted_meaning_all <- df_check_adjusted_all %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lmerTest::lmer(score ~ meaning + initial + (1 | pid), data = .x))) %>% # random intercept model
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_meaning_all_unlist <- as.data.frame(summary(df_check_adjusted_meaning_all[[1]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_meaning_all[[1]])$Std_Coefficient)
for (i in 2:length(df_check_adjusted_meaning_all)) {
  df_check_adjusted_meaning_all_unlist <- 
    bind_rows(df_check_adjusted_meaning_all_unlist, 
              as.data.frame(summary(df_check_adjusted_meaning_all[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_meaning_all[[i]])$Std_Coefficient))
}
df_check_adjusted_meaning_all_unlist <- df_check_adjusted_meaning_all_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "meaning", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

# selfes
df_check_adjusted_selfes_all <- df_check_adjusted_all %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lmerTest::lmer(score ~ selfes + initial + (1 | pid), data = .x))) %>% # random intercept model
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_selfes_all_unlist <- as.data.frame(summary(df_check_adjusted_selfes_all[[1]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_selfes_all[[1]])$Std_Coefficient)
for (i in 2:length(df_check_adjusted_selfes_all)) {
  df_check_adjusted_selfes_all_unlist <- 
    bind_rows(df_check_adjusted_selfes_all_unlist, 
              as.data.frame(summary(df_check_adjusted_selfes_all[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_selfes_all[[i]])$Std_Coefficient))
}
df_check_adjusted_selfes_all_unlist <- df_check_adjusted_selfes_all_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "selfes", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

# concept
df_check_adjusted_concept_all <- df_check_adjusted_all %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lmerTest::lmer(score ~ concept + initial + (1 | pid), data = .x))) %>% # random intercept model
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_concept_all_unlist <- as.data.frame(summary(df_check_adjusted_concept_all[[1]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_concept_all[[1]])$Std_Coefficient)
for (i in 2:length(df_check_adjusted_concept_all)) {
  df_check_adjusted_concept_all_unlist <- 
    bind_rows(df_check_adjusted_concept_all_unlist, 
              as.data.frame(summary(df_check_adjusted_concept_all[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_concept_all[[i]])$Std_Coefficient))
}
df_check_adjusted_concept_all_unlist <- df_check_adjusted_concept_all_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "concept", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

Does the relationship between the squared difference in one trait (current vs. ideal) and well-being aspects still hold if we control for the initial trait level?

Combine as one table:

kable(df_check_adjusted_swls_all_unlist %>% 
        filter(!term %in% c("Intercept", "initial")) %>% 
        select(outcome, d_swls = d, p_ls = p, sig_ls = sig) %>% 
        left_join(
          df_check_adjusted_meaning_all_unlist %>% 
            filter(!term %in% c("Intercept", "initial")) %>% 
            select(outcome, d_meaning = d, p_m = p, sig_m = sig)
        ) %>% 
          left_join(
            df_check_adjusted_selfes_all_unlist %>% 
              filter(!term %in% c("Intercept", "initial")) %>% 
              select(outcome, d_selfes = d, p_se = p, sig_se = sig)
          ) %>% 
          left_join(
            df_check_adjusted_concept_all_unlist %>% 
              filter(!term %in% c("Intercept", "initial")) %>% 
              select(outcome, d_concept = d, p_c = p, sig_c = sig)
          ), 
       digits = 3)
outcome d_swls p_ls sig_ls d_meaning p_m sig_m d_selfes p_se sig_se d_concept p_c sig_c
extraversion -0.228 0.000 *** -0.207 0.000 *** -0.259 0.000 *** -0.163 0.000 ***
agreeableness -0.142 0.000 *** -0.138 0.000 *** -0.210 0.000 *** -0.202 0.000 ***
conscientiousness -0.184 0.000 *** -0.144 0.000 *** -0.185 0.000 *** -0.120 0.000 ***
neuroticism -0.197 0.000 *** -0.198 0.000 *** -0.289 0.000 *** -0.186 0.000 ***
openness -0.107 0.000 *** -0.104 0.000 *** -0.121 0.000 *** -0.104 0.000 ***
sociability -0.187 0.000 *** -0.180 0.000 *** -0.230 0.000 *** -0.151 0.000 ***
assertiveness -0.148 0.000 *** -0.158 0.000 *** -0.144 0.000 *** -0.141 0.000 ***
energy -0.222 0.000 *** -0.171 0.000 *** -0.223 0.000 *** -0.142 0.000 ***
compassion -0.107 0.000 *** -0.070 0.006 ** -0.145 0.000 *** -0.160 0.000 ***
respectfulness -0.087 0.000 *** -0.082 0.000 *** -0.129 0.000 *** -0.103 0.000 ***
trust -0.105 0.000 *** -0.125 0.000 *** -0.162 0.000 *** -0.179 0.000 ***
organization -0.125 0.000 *** -0.109 0.000 *** -0.117 0.000 *** -0.080 0.000 ***
productiveness -0.196 0.000 *** -0.150 0.000 *** -0.195 0.000 *** -0.132 0.000 ***
responsibility -0.177 0.000 *** -0.122 0.000 *** -0.197 0.000 *** -0.142 0.000 ***
anxiety -0.150 0.000 *** -0.142 0.000 *** -0.205 0.000 *** -0.124 0.000 ***
depression -0.220 0.000 *** -0.213 0.000 *** -0.331 0.000 *** -0.173 0.000 ***
volatility -0.164 0.000 *** -0.168 0.000 *** -0.198 0.000 *** -0.175 0.000 ***
curiosity -0.134 0.000 *** -0.100 0.000 *** -0.121 0.000 *** -0.103 0.000 ***
aesthetic -0.033 0.196 -0.061 0.015 * -0.048 0.056 -0.061 0.015 *
imagination -0.153 0.000 *** -0.133 0.000 *** -0.160 0.000 *** -0.118 0.000 ***

Almost all effects significant at the p < .001 level when we include all time points at once. Somewhat stronger effects for neuroticism and extraversion.


6.2 H2: Well-being - latent change (H5 in paper)

Both intervention groups (but not the control group between T1 and T2) will increase in all four psychological well-being indicators.

We will test the mean-level difference between baseline and follow up using latent change models. Our main focus will be changes from T1 to T2 and we will check in a second set of models whether any changes persist from T2 to T3.

6.2.1 Intervention effects (changes from T1 to T2)

6.2.1.1 Life satisfaction

Fit model:

Show the code
# Code snippets adapted from Kievit et al. (2018) -- CC-BY -- https://doi.org/10.1016/j.dcn.2017.11.007

# Fit the multiple indicator Univariate Latent Change Score model
mi_lcs_swls_hyp2 <- '
swls_t1 =~ 1*sw06_01_t1 + lamb2*sw06_02_t1 + lamb3*sw06_03_t1 + lamb4*sw06_04_t1 # This specifies the measurement model for swls_t1 
swls_t2 =~ 1*sw06_01_t2 + lamb2*sw06_02_t2 + lamb3*sw06_03_t2 + lamb4*sw06_04_t2 # This specifies the measurement model for swls_t2 with the equality constrained factor loadings

swls_t2 ~ 1*swls_t1     # This parameter regresses swls_t2 perfectly on swls_t1
d_swls_1 =~ 1*swls_t2   # This defines the latent change score factor as measured perfectly by scores on swls_t2
swls_t2 ~ 0*1           # This line constrains the intercept of swls_t2 to 0
swls_t2 ~~ 0*swls_t2    # This fixes the variance of swls_t2 to 0

d_swls_1 ~ 1           # This estimates the intercept of the change score 
swls_t1 ~ 1            # This estimates the intercept of swls_t1 
d_swls_1 ~~ d_swls_1   # This estimates the variance of the change scores 
swls_t1 ~~ swls_t1     # This estimates the variance of the swls_t1 
swls_t1 ~~ d_swls_1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

sw06_01_t1 ~~ sw06_01_t2   # This allows residual covariance on indicator X1 across T1 and T2
sw06_02_t1 ~~ sw06_02_t2   # This allows residual covariance on indicator X2 across T1 and T2
sw06_03_t1 ~~ sw06_03_t2   # This allows residual covariance on indicator X3 across T1 and T2
sw06_04_t1 ~~ sw06_04_t2   # This allows residual covariance on indicator X4 across T1 and T2

sw06_01_t1 ~~ res1*sw06_01_t1   # This allows residual variance on indicator X1 at T1 
sw06_02_t1 ~~ res2*sw06_02_t1   # This allows residual variance on indicator X2 at T1
sw06_03_t1 ~~ res3*sw06_03_t1   # This allows residual variance on indicator X3 at T1
sw06_04_t1 ~~ res4*sw06_04_t1   # This allows residual variance on indicator X4 at T1

sw06_01_t2 ~~ res1*sw06_01_t2  # This allows residual variance on indicator X1 at T2 
sw06_02_t2 ~~ res2*sw06_02_t2  # This allows residual variance on indicator X2 at T2 
sw06_03_t2 ~~ res3*sw06_03_t2  # This allows residual variance on indicator X3 at T2
sw06_04_t2 ~~ res4*sw06_04_t2  # This allows residual variance on indicator X4 at T2

sw06_01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
sw06_02_t1 ~ m2*1     # This estimates the intercept of X2 at T1
sw06_03_t1 ~ m3*1     # This estimates the intercept of X3 at T1
sw06_04_t1 ~ m4*1     # This estimates the intercept of X4 at T1

sw06_01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
sw06_02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
sw06_03_t2 ~ m3*1     # This estimates the intercept of X3 at T2
sw06_04_t2 ~ m4*1     # This estimates the intercept of X4 at T2
'
fit_mi_lcs_swls_hyp2 <- lavaan(mi_lcs_swls_hyp2, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_swls_hyp2, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_swls_hyp2) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
673 19 13061.93 13147.66 0.977 0.065 0.03
# parameters of interest
params_lcs_swls_hyp2 <- broom::tidy(fit_mi_lcs_swls_hyp2, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("swls_t2 ~ swls_t1", "d_swls_1 =~ swls_t2", "swls_t1 ~~ d_swls_1", # change parameters
                           "d_swls_1 ~1 ", "swls_t1 ~1 ", "", # means
                           "d_swls_1 ~~ d_swls_1")) # variances
kable(params_lcs_swls_hyp2, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
swls_t2 ~ swls_t1 1.000 1.000 1.000 0.984 NA NA
d_swls_1 =~ swls_t2 1.000 1.000 1.000 0.653 NA NA
d_swls_1 ~1 0.271 0.164 0.378 0.413 8.324 0
swls_t1 ~1 2.685 2.539 2.831 2.716 60.416 0
d_swls_1 ~~ d_swls_1 0.431 0.261 0.600 1.000 8.360 0
swls_t1 ~~ d_swls_1 -0.199 -0.319 -0.079 -0.307 -5.440 0

Plot model:

semPaths(fit_mi_lcs_swls_hyp2, what="est", 
         sizeLat = 7, sizeMan = 7, edge.label.cex = .75, intercepts = T, edge.color="black")

Significantly higher life satisfaction at the post test, b = 0.271, beta = 0.273, p = 0. Those with initially higher levels of life satisfaction (at T1) change to a lesser degree.

What happens in the waitlist control group during this time?

Fit model:

Show the code
fit_mi_lcs_swls_hyp2_cg <- lavaan(mi_lcs_swls_hyp2, data=df_sbsa2_wide_wb %>% filter(rando=="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_swls_hyp2_cg, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_swls_hyp2_cg) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
175 19 3244.162 3304.293 0.978 0.071 0.037
# parameters of interest
params_lcs_swls_hyp2_cg <- broom::tidy(fit_mi_lcs_swls_hyp2_cg, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("swls_t2 ~ swls_t1", "d_swls_1 =~ swls_t2", "swls_t1 ~~ d_swls_1", # change parameters
                           "d_swls_1 ~1 ", "swls_t1 ~1 ", "", # means
                           "d_swls_1 ~~ d_swls_1")) # variances
kable(params_lcs_swls_hyp2_cg, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
swls_t2 ~ swls_t1 1.000 1.000 1.000 0.979 NA NA
d_swls_1 =~ swls_t2 1.000 1.000 1.000 0.481 NA NA
d_swls_1 ~1 0.251 0.058 0.443 0.467 4.276 0.000
swls_t1 ~1 2.634 2.333 2.934 2.412 28.873 0.000
d_swls_1 ~~ d_swls_1 0.287 0.015 0.560 1.000 3.472 0.001
swls_t1 ~~ d_swls_1 -0.117 -0.347 0.113 -0.200 -1.680 0.093

Life satisfaction changes in the control group significantly at positively (at p < .001), b = 0.251, beta = 0.252, p = 0. Slightly weaker effect size than in intervention group.

6.2.1.2 Meaning in life

Fit model:

Show the code
# Code snippets adapted from Kievit et al. (2018) -- CC-BY -- https://doi.org/10.1016/j.dcn.2017.11.007

# Fit the multiple indicator Univariate Latent Change Score model
mi_lcs_meaning_hyp2 <- '
meaning_t1 =~ 1*meaning_par1_t1 + lamb2*meaning_par2_t1 + lamb3*meaning_par3_t1 # This specifies the measurement model for meaning_t1 
meaning_t2 =~ 1*meaning_par1_t2 + lamb2*meaning_par2_t2 + lamb3*meaning_par3_t2 # This specifies the measurement model for meaning_t2 with the equality constrained factor loadings

meaning_t2 ~ 1*meaning_t1     # This parameter regresses meaning_t2 perfectly on meaning_t1
d_meaning_1 =~ 1*meaning_t2   # This defines the latent change score factor as measured perfectly by scores on meaning_t2
meaning_t2 ~ 0*1              # This line constrains the intercept of meaning_t2 to 0
meaning_t2 ~~ 0*meaning_t2    # This fixes the variance of meaning_t2 to 0

d_meaning_1 ~ 1              # This estimates the intercept of the change score 
meaning_t1 ~ 1               # This estimates the intercept of meaning_t1 
d_meaning_1 ~~ d_meaning_1   # This estimates the variance of the change scores 
meaning_t1 ~~ meaning_t1     # This estimates the variance of the meaning_t1 
meaning_t1 ~~ d_meaning_1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

meaning_par1_t1 ~~ meaning_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
meaning_par2_t1 ~~ meaning_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
meaning_par3_t1 ~~ meaning_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

meaning_par1_t1 ~~ res1*meaning_par1_t1   # This allows residual variance on indicator X1 at T1 
meaning_par2_t1 ~~ res2*meaning_par2_t1   # This allows residual variance on indicator X2 at T1
meaning_par3_t1 ~~ res3*meaning_par3_t1   # This allows residual variance on indicator X3 at T1

meaning_par1_t2 ~~ res1*meaning_par1_t2  # This allows residual variance on indicator X1 at T2 
meaning_par2_t2 ~~ res2*meaning_par2_t2  # This allows residual variance on indicator X2 at T2 
meaning_par3_t2 ~~ res3*meaning_par3_t2  # This allows residual variance on indicator X3 at T2

meaning_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
meaning_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
meaning_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

meaning_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
meaning_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
meaning_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
'
fit_mi_lcs_meaning_hyp2 <- lavaan(mi_lcs_meaning_hyp2, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_meaning_hyp2, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_meaning_hyp2) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
673 15 9545.085 9612.761 0.992 0.055 0.025
# parameters of interest
params_lcs_meaning_hyp2 <- broom::tidy(fit_mi_lcs_meaning_hyp2, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("meaning_t2 ~ meaning_t1", "d_meaning_1 =~ meaning_t2", "meaning_t1 ~~ d_meaning_1", # change parameters
                           "d_meaning_1 ~1 ", "meaning_t1 ~1 ", "", # means
                           "d_meaning_1 ~~ d_meaning_1")) # variances

kable(params_lcs_meaning_hyp2, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
meaning_t2 ~ meaning_t1 1.000 1.000 1.000 1.017 NA NA
d_meaning_1 =~ meaning_t2 1.000 1.000 1.000 0.698 NA NA
d_meaning_1 ~1 0.212 0.107 0.317 0.317 6.646 0
meaning_t1 ~1 3.209 3.065 3.352 3.292 73.486 0
d_meaning_1 ~~ d_meaning_1 0.447 0.266 0.628 1.000 8.137 0
meaning_t1 ~~ d_meaning_1 -0.239 -0.364 -0.115 -0.368 -6.346 0

Participants improved significantly in meaning in life across time, b = 0.212, beta = 0.182, p = 0.

What happens in the waitlist control group during this time?

Fit model:

Show the code
fit_mi_lcs_meaning_hyp2_cg <- lavaan(mi_lcs_meaning_hyp2, data=df_sbsa2_wide_wb %>% filter(rando=="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_meaning_hyp2_cg, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_meaning_hyp2_cg) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
175 15 2481.44 2528.912 1 0 0.033
# parameters of interest
params_lcs_meaning_hyp2_cg <- broom::tidy(fit_mi_lcs_meaning_hyp2_cg, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("meaning_t2 ~ meaning_t1", "d_meaning_1 =~ meaning_t2", "meaning_t1 ~~ d_meaning_1", # change parameters
                           "d_meaning_1 ~1 ", "meaning_t1 ~1 ", "", # means
                           "d_meaning_1 ~~ d_meaning_1")) # variances
kable(params_lcs_meaning_hyp2_cg, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
meaning_t2 ~ meaning_t1 1.000 1.000 1.000 0.990 NA NA
d_meaning_1 =~ meaning_t2 1.000 1.000 1.000 0.662 NA NA
d_meaning_1 ~1 0.292 0.073 0.510 0.413 4.390 0.000
meaning_t1 ~1 3.190 2.884 3.496 3.021 34.294 0.000
d_meaning_1 ~~ d_meaning_1 0.498 0.193 0.803 1.000 5.378 0.000
meaning_t1 ~~ d_meaning_1 -0.238 -0.514 0.039 -0.319 -2.832 0.005

Meaning increases significantly in the control group, b = 0.292, beta = 0.251, p = 0, with an even stronger effect size than in the intervention groups.

6.2.1.3 Self-esteem

Fit model:

Show the code
# Code snippets adapted from Kievit et al. (2018) -- CC-BY -- https://doi.org/10.1016/j.dcn.2017.11.007

# Fit the multiple indicator Univariate Latent Change Score model
mi_lcs_selfes_hyp2 <- '
selfes_t1 =~ 1*selfes_par1_t1 + lamb2*selfes_par2_t1 + lamb3*selfes_par3_t1 # This specifies the measurement model for selfes_t1 
selfes_t2 =~ 1*selfes_par1_t2 + lamb2*selfes_par2_t2 + lamb3*selfes_par3_t2 # This specifies the measurement model for selfes_t2 with the equality constrained factor loadings

selfes_t2 ~ 1*selfes_t1     # This parameter regresses selfes_t2 perfectly on selfes_t1
d_selfes_1 =~ 1*selfes_t2   # This defines the latent change score factor as measured perfectly by scores on selfes_t2
selfes_t2 ~ 0*1             # This line constrains the intercept of selfes_t2 to 0
selfes_t2 ~~ 0*selfes_t2    # This fixes the variance of selfes_t2 to 0

d_selfes_1 ~ 1             # This estimates the intercept of the change score 
selfes_t1 ~ 1              # This estimates the intercept of selfes_t1 
d_selfes_1 ~~ d_selfes_1   # This estimates the variance of the change scores 
selfes_t1 ~~ selfes_t1     # This estimates the variance of the selfes_t1 
selfes_t1 ~~ d_selfes_1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

selfes_par1_t1 ~~ selfes_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
selfes_par2_t1 ~~ selfes_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
selfes_par3_t1 ~~ selfes_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

selfes_par1_t1 ~~ res1*selfes_par1_t1   # This allows residual variance on indicator X1 at T1 
selfes_par2_t1 ~~ res2*selfes_par2_t1   # This allows residual variance on indicator X2 at T1
selfes_par3_t1 ~~ res3*selfes_par3_t1   # This allows residual variance on indicator X3 at T1

selfes_par1_t2 ~~ res1*selfes_par1_t2  # This allows residual variance on indicator X1 at T2 
selfes_par2_t2 ~~ res2*selfes_par2_t2  # This allows residual variance on indicator X2 at T2 
selfes_par3_t2 ~~ res3*selfes_par3_t2  # This allows residual variance on indicator X3 at T2

selfes_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
selfes_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
selfes_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

selfes_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
selfes_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
selfes_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
'
fit_mi_lcs_selfes_hyp2 <- lavaan(mi_lcs_selfes_hyp2, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_selfes_hyp2, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_selfes_hyp2) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
673 15 7206.632 7274.308 1 0 0.016
# parameters of interest
params_lcs_selfes_hyp2 <- broom::tidy(fit_mi_lcs_selfes_hyp2, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("selfes_t2 ~ selfes_t1", "d_selfes_1 =~ selfes_t2", "selfes_t1 ~~ d_selfes_1", # change parameters
                           "d_selfes_1 ~1 ", "selfes_t1 ~1 ", "", # means
                           "d_selfes_1 ~~ d_selfes_1")) # variances

kable(params_lcs_selfes_hyp2, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
selfes_t2 ~ selfes_t1 1.000 1.000 1.000 1.037 NA NA
d_selfes_1 =~ selfes_t2 1.000 1.000 1.000 0.670 NA NA
d_selfes_1 ~1 0.263 0.188 0.338 0.546 11.497 0
selfes_t1 ~1 3.540 3.433 3.647 4.745 108.567 0
d_selfes_1 ~~ d_selfes_1 0.233 0.149 0.317 1.000 9.126 0
selfes_t1 ~~ d_selfes_1 -0.136 -0.197 -0.074 -0.377 -7.278 0

Participants increased significantly in self-esteem between the two assessments, b = 0.263, beta = 0.299, p = 0.

What happens in the waitlist control group during this time?

Fit model:

Show the code
fit_mi_lcs_selfes_hyp2_cg <- lavaan(mi_lcs_selfes_hyp2, data=df_sbsa2_wide_wb %>% filter(rando=="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_selfes_hyp2_cg, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_selfes_hyp2_cg) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
175 15 1724.661 1772.133 1 0 0.02
# parameters of interest
params_lcs_selfes_hyp2_cg <- broom::tidy(fit_mi_lcs_selfes_hyp2_cg, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("selfes_t2 ~ selfes_t1", "d_selfes_1 =~ selfes_t2", "selfes_t1 ~~ d_selfes_1", # change parameters
                           "d_selfes_1 ~1 ", "selfes_t1 ~1 ", "", # means
                           "d_selfes_1 ~~ d_selfes_1")) # variances
kable(params_lcs_selfes_hyp2_cg, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
selfes_t2 ~ selfes_t1 1.000 1.000 1.000 0.989 NA NA
d_selfes_1 =~ selfes_t2 1.000 1.000 1.000 0.395 NA NA
d_selfes_1 ~1 0.187 0.077 0.297 0.587 5.606 0.000
selfes_t1 ~1 3.545 3.326 3.763 4.443 53.386 0.000
d_selfes_1 ~~ d_selfes_1 0.102 0.027 0.177 1.000 4.465 0.000
selfes_t1 ~~ d_selfes_1 -0.043 -0.119 0.032 -0.171 -1.888 0.059

Self-esteem changes significantly and positively in the control group, b = 0.187, beta = 0.213, p = 0. Comparable effect size to the intervention groups.

6.2.1.4 Self concept clarity

Fit model:

Show the code
# Code snippets adapted from Kievit et al. (2018) -- CC-BY -- https://doi.org/10.1016/j.dcn.2017.11.007

# Fit the multiple indicator Univariate Latent Change Score model
mi_lcs_concept_hyp2 <- '
concept_t1 =~ 1*concept_par1_t1 + lamb2*concept_par2_t1 + lamb3*concept_par3_t1 # This specifies the measurement model for concept_t1 
concept_t2 =~ 1*concept_par1_t2 + lamb2*concept_par2_t2 + lamb3*concept_par3_t2 # This specifies the measurement model for concept_t2 with the equality constrained factor loadings

concept_t2 ~ 1*concept_t1     # This parameter regresses concept_t2 perfectly on concept_t1
d_concept_1 =~ 1*concept_t2   # This defines the latent change score factor as measured perfectly by scores on concept_t2
concept_t2 ~ 0*1              # This line constrains the intercept of concept_t2 to 0
concept_t2 ~~ 0*concept_t2    # This fixes the variance of concept_t2 to 0

d_concept_1 ~ 1              # This estimates the intercept of the change score 
concept_t1 ~ 1               # This estimates the intercept of concept_t1 
d_concept_1 ~~ d_concept_1   # This estimates the variance of the change scores 
concept_t1 ~~ concept_t1     # This estimates the variance of the concept_t1 
concept_t1 ~~ d_concept_1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

concept_par1_t1 ~~ concept_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
concept_par2_t1 ~~ concept_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
concept_par3_t1 ~~ concept_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

concept_par1_t1 ~~ res1*concept_par1_t1   # This allows residual variance on indicator X1 at T1 
concept_par2_t1 ~~ res2*concept_par2_t1   # This allows residual variance on indicator X2 at T1
concept_par3_t1 ~~ res3*concept_par3_t1   # This allows residual variance on indicator X3 at T1

concept_par1_t2 ~~ res1*concept_par1_t2  # This allows residual variance on indicator X1 at T2 
concept_par2_t2 ~~ res2*concept_par2_t2  # This allows residual variance on indicator X2 at T2 
concept_par3_t2 ~~ res3*concept_par3_t2  # This allows residual variance on indicator X3 at T2

concept_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
concept_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
concept_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

concept_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
concept_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
concept_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
'
fit_mi_lcs_concept_hyp2 <- lavaan(mi_lcs_concept_hyp2, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_concept_hyp2, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_concept_hyp2) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
673 15 7401.241 7468.917 0.996 0.036 0.019
# parameters of interest
params_lcs_concept_hyp2 <- broom::tidy(fit_mi_lcs_concept_hyp2, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("concept_t2 ~ concept_t1", "d_concept_1 =~ concept_t2", "concept_t1 ~~ d_concept_1", # change parameters
                           "d_concept_1 ~1 ", "concept_t1 ~1 ", "", # means
                           "d_concept_1 ~~ d_concept_1")) # variances

kable(params_lcs_concept_hyp2, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
concept_t2 ~ concept_t1 1.000 1.000 1.000 1.021 NA NA
d_concept_1 =~ concept_t2 1.000 1.000 1.000 0.754 NA NA
d_concept_1 ~1 0.177 0.100 0.254 0.355 7.585 0
concept_t1 ~1 3.044 2.942 3.145 4.502 98.796 0
d_concept_1 ~~ d_concept_1 0.249 0.160 0.339 1.000 9.196 0
concept_t1 ~~ d_concept_1 -0.134 -0.194 -0.075 -0.397 -7.416 0

Self concept clarity improved significantly across time, b = 0.177, beta = 0.198, p = 0.

What happens in the waitlist control group during this time?

Fit model:

Show the code
fit_mi_lcs_concept_hyp2_cg <- lavaan(mi_lcs_concept_hyp2, data=df_sbsa2_wide_wb %>% filter(rando=="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_concept_hyp2_cg, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_concept_hyp2_cg) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
175 15 1805.904 1853.376 0.991 0.065 0.026
# parameters of interest
params_lcs_concept_hyp2_cg <- broom::tidy(fit_mi_lcs_concept_hyp2_cg, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("concept_t2 ~ concept_t1", "d_concept_1 =~ concept_t2", "concept_t1 ~~ d_concept_1", # change parameters
                           "d_concept_1 ~1 ", "concept_t1 ~1 ", "", # means
                           "d_concept_1 ~~ d_concept_1")) # variances
kable(params_lcs_concept_hyp2_cg, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
concept_t2 ~ concept_t1 1.000 1.000 1.000 0.971 NA NA
d_concept_1 =~ concept_t2 1.000 1.000 1.000 0.611 NA NA
d_concept_1 ~1 0.057 -0.086 0.201 0.118 1.317 0.188
concept_t1 ~1 3.122 2.904 3.339 4.056 47.175 0.000
d_concept_1 ~~ d_concept_1 0.235 0.002 0.467 1.000 3.324 0.001
concept_t1 ~~ d_concept_1 -0.099 -0.221 0.023 -0.266 -2.676 0.007

Self concept clarity changes in the control group not significant, b = 0.057, beta = 0.064, p = 0.188. Still a slight positive estimate, but weaker effect size than in intervention group.

6.2.2 Follow-up effects (changes from T2 to T3)

6.2.2.1 Life satisfaction

Fit model:

Show the code
# Code snippets adapted from Kievit et al. (2018) -- CC-BY -- https://doi.org/10.1016/j.dcn.2017.11.007

# Fit the multiple indicator Univariate Latent Change Score model
mi_lcs_swls_hyp2_fu <- '
swls_t2 =~ 1*sw06_01_t2 + lamb2*sw06_02_t2 + lamb3*sw06_03_t2 + lamb4*sw06_04_t2 # This specifies the measurement model for swls_t2 
swls_t3 =~ 1*sw06_01_t3 + lamb2*sw06_02_t3 + lamb3*sw06_03_t3 + lamb4*sw06_04_t3 # This specifies the measurement model for swls_t3 with the equality constrained factor loadings

swls_t3 ~ 1*swls_t2     # This parameter regresses swls_t3 perfectly on swls_t2
d_swls_1 =~ 1*swls_t3   # This defines the latent change score factor as measured perfectly by scores on swls_t3
swls_t3 ~ 0*1           # This line constrains the intercept of swls_t3 to 0
swls_t3 ~~ 0*swls_t3    # This fixes the variance of swls_t3 to 0

d_swls_1 ~ 1           # This estimates the intercept of the change score 
swls_t2 ~ 1            # This estimates the intercept of swls_t2 
d_swls_1 ~~ d_swls_1   # This estimates the variance of the change scores 
swls_t2 ~~ swls_t2     # This estimates the variance of the swls_t2 
swls_t2 ~~ d_swls_1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

sw06_01_t2 ~~ sw06_01_t3   # This allows residual covariance on indicator X1 across T1 and T2
sw06_02_t2 ~~ sw06_02_t3   # This allows residual covariance on indicator X2 across T1 and T2
sw06_03_t2 ~~ sw06_03_t3   # This allows residual covariance on indicator X3 across T1 and T2
sw06_04_t2 ~~ sw06_04_t3   # This allows residual covariance on indicator X4 across T1 and T2

sw06_01_t2 ~~ res1*sw06_01_t2   # This allows residual variance on indicator X1 at T1 
sw06_02_t2 ~~ res2*sw06_02_t2   # This allows residual variance on indicator X2 at T1
sw06_03_t2 ~~ res3*sw06_03_t2   # This allows residual variance on indicator X3 at T1
sw06_04_t2 ~~ res4*sw06_04_t2   # This allows residual variance on indicator X4 at T1

sw06_01_t3 ~~ res1*sw06_01_t3  # This allows residual variance on indicator X1 at T2 
sw06_02_t3 ~~ res2*sw06_02_t3  # This allows residual variance on indicator X2 at T2 
sw06_03_t3 ~~ res3*sw06_03_t3  # This allows residual variance on indicator X3 at T2
sw06_04_t3 ~~ res4*sw06_04_t3  # This allows residual variance on indicator X4 at T2

sw06_01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
sw06_02_t2 ~ m2*1     # This estimates the intercept of X2 at T1
sw06_03_t2 ~ m3*1     # This estimates the intercept of X3 at T1
sw06_04_t2 ~ m4*1     # This estimates the intercept of X4 at T1

sw06_01_t3 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
sw06_02_t3 ~ m2*1     # This estimates the intercept of X2 at T2
sw06_03_t3 ~ m3*1     # This estimates the intercept of X3 at T2
sw06_04_t3 ~ m4*1     # This estimates the intercept of X4 at T2
'
fit_mi_lcs_swls_hyp2_fu <- lavaan(mi_lcs_swls_hyp2_fu, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_swls_hyp2_fu, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_swls_hyp2_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
579 19 10808.9 10891.76 0.985 0.058 0.022
# parameters of interest
params_lcs_swls_hyp2_fu <- broom::tidy(fit_mi_lcs_swls_hyp2_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("swls_t3 ~ swls_t2", "d_swls_1 =~ swls_t3", "swls_t2 ~~ d_swls_1", # change parameters
                           "d_swls_1 ~1 ", "swls_t2 ~1 ", "", # means
                           "d_swls_1 ~~ d_swls_1")) # variances
kable(params_lcs_swls_hyp2_fu, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
swls_t3 ~ swls_t2 1.000 1.000 1.000 0.994 NA NA
d_swls_1 =~ swls_t3 1.000 1.000 1.000 0.532 NA NA
d_swls_1 ~1 0.110 0.011 0.209 0.202 3.657 0
swls_t2 ~1 2.966 2.812 3.121 2.926 63.139 0
d_swls_1 ~~ d_swls_1 0.294 0.109 0.479 1.000 5.227 0
swls_t2 ~~ d_swls_1 -0.141 -0.258 -0.024 -0.256 -3.966 0

Life satisfaction further increased from T2 to the T3 follow up, b = 0.11, beta = 0.111, p = 0.

6.2.2.2 Meaning in life

Fit model:

Show the code
# Code snippets adapted from Kievit et al. (2018) -- CC-BY -- https://doi.org/10.1016/j.dcn.2017.11.007

# Fit the multiple indicator Univariate Latent Change Score model
mi_lcs_meaning_hyp2_fu <- '
meaning_t2 =~ 1*meaning_par1_t2 + lamb2*meaning_par2_t2 + lamb3*meaning_par3_t2 # This specifies the measurement model for meaning_t2 
meaning_t3 =~ 1*meaning_par1_t3 + lamb2*meaning_par2_t3 + lamb3*meaning_par3_t3 # This specifies the measurement model for meaning_t3 with the equality constrained factor loadings

meaning_t3 ~ 1*meaning_t2     # This parameter regresses meaning_t3 perfectly on meaning_t2
d_meaning_1 =~ 1*meaning_t3   # This defines the latent change score factor as measured perfectly by scores on meaning_t3
meaning_t3 ~ 0*1              # This line constrains the intercept of meaning_t3 to 0
meaning_t3 ~~ 0*meaning_t3    # This fixes the variance of meaning_t3 to 0

d_meaning_1 ~ 1              # This estimates the intercept of the change score 
meaning_t2 ~ 1               # This estimates the intercept of meaning_t2 
d_meaning_1 ~~ d_meaning_1   # This estimates the variance of the change scores 
meaning_t2 ~~ meaning_t2     # This estimates the variance of the meaning_t2 
meaning_t2 ~~ d_meaning_1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

meaning_par1_t2 ~~ meaning_par1_t3   # This allows residual covariance on indicator X1 across T1 and T2
meaning_par2_t2 ~~ meaning_par2_t3   # This allows residual covariance on indicator X2 across T1 and T2
meaning_par3_t2 ~~ meaning_par3_t3   # This allows residual covariance on indicator X3 across T1 and T2

meaning_par1_t2 ~~ res1*meaning_par1_t2   # This allows residual variance on indicator X1 at T1 
meaning_par2_t2 ~~ res2*meaning_par2_t2   # This allows residual variance on indicator X2 at T1
meaning_par3_t2 ~~ res3*meaning_par3_t2   # This allows residual variance on indicator X3 at T1

meaning_par1_t3 ~~ res1*meaning_par1_t3  # This allows residual variance on indicator X1 at T2 
meaning_par2_t3 ~~ res2*meaning_par2_t3  # This allows residual variance on indicator X2 at T2 
meaning_par3_t3 ~~ res3*meaning_par3_t3  # This allows residual variance on indicator X3 at T2

meaning_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
meaning_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T1
meaning_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T1

meaning_par1_t3 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
meaning_par2_t3 ~ m2*1     # This estimates the intercept of X2 at T2
meaning_par3_t3 ~ m3*1     # This estimates the intercept of X3 at T2
'
fit_mi_lcs_meaning_hyp2_fu <- lavaan(mi_lcs_meaning_hyp2_fu, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_meaning_hyp2_fu, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_meaning_hyp2_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
579 15 8150.359 8215.779 0.995 0.046 0.031
# parameters of interest
params_lcs_meaning_hyp2_fu <- broom::tidy(fit_mi_lcs_meaning_hyp2_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("meaning_t3 ~ meaning_t2", "d_meaning_1 =~ meaning_t3", "meaning_t2 ~~ d_meaning_1", # change parameters
                           "d_meaning_1 ~1 ", "meaning_t2 ~1 ", "", # means
                           "d_meaning_1 ~~ d_meaning_1")) # variances

kable(params_lcs_meaning_hyp2_fu, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
meaning_t3 ~ meaning_t2 1.000 1.000 1.000 0.964 NA NA
d_meaning_1 =~ meaning_t3 1.000 1.000 1.000 0.674 NA NA
d_meaning_1 ~1 0.150 0.032 0.267 0.210 4.197 0
meaning_t2 ~1 3.412 3.250 3.575 3.347 69.108 0
d_meaning_1 ~~ d_meaning_1 0.508 0.275 0.741 1.000 7.176 0
meaning_t2 ~~ d_meaning_1 -0.215 -0.353 -0.076 -0.296 -5.106 0

Meaning in life further increased from T2 to the T3 follow up, b = 0.15, beta = 0.129, p = 0.

6.2.2.3 Self-esteem

Fit model:

Show the code
# Code snippets adapted from Kievit et al. (2018) -- CC-BY -- https://doi.org/10.1016/j.dcn.2017.11.007

# Fit the multiple indicator Univariate Latent Change Score model
mi_lcs_selfes_hyp2_fu <- '
selfes_t2 =~ 1*selfes_par1_t2 + lamb2*selfes_par2_t2 + lamb3*selfes_par3_t2 # This specifies the measurement model for selfes_t2 
selfes_t3 =~ 1*selfes_par1_t3 + lamb2*selfes_par2_t3 + lamb3*selfes_par3_t3 # This specifies the measurement model for selfes_t3 with the equality constrained factor loadings

selfes_t3 ~ 1*selfes_t2     # This parameter regresses selfes_t3 perfectly on selfes_t2
d_selfes_1 =~ 1*selfes_t3   # This defines the latent change score factor as measured perfectly by scores on selfes_t3
selfes_t3 ~ 0*1             # This line constrains the intercept of selfes_t3 to 0
selfes_t3 ~~ 0*selfes_t3    # This fixes the variance of selfes_t3 to 0

d_selfes_1 ~ 1             # This estimates the intercept of the change score 
selfes_t2 ~ 1              # This estimates the intercept of selfes_t2 
d_selfes_1 ~~ d_selfes_1   # This estimates the variance of the change scores 
selfes_t2 ~~ selfes_t2     # This estimates the variance of the selfes_t2 
selfes_t2 ~~ d_selfes_1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

selfes_par1_t2 ~~ selfes_par1_t3   # This allows residual covariance on indicator X1 across T1 and T2
selfes_par2_t2 ~~ selfes_par2_t3   # This allows residual covariance on indicator X2 across T1 and T2
selfes_par3_t2 ~~ selfes_par3_t3   # This allows residual covariance on indicator X3 across T1 and T2

selfes_par1_t2 ~~ res1*selfes_par1_t2   # This allows residual variance on indicator X1 at T1 
selfes_par2_t2 ~~ res2*selfes_par2_t2   # This allows residual variance on indicator X2 at T1
selfes_par3_t2 ~~ res3*selfes_par3_t2   # This allows residual variance on indicator X3 at T1

selfes_par1_t3 ~~ res1*selfes_par1_t3  # This allows residual variance on indicator X1 at T2 
selfes_par2_t3 ~~ res2*selfes_par2_t3  # This allows residual variance on indicator X2 at T2 
selfes_par3_t3 ~~ res3*selfes_par3_t3  # This allows residual variance on indicator X3 at T2

selfes_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
selfes_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T1
selfes_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T1

selfes_par1_t3 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
selfes_par2_t3 ~ m2*1     # This estimates the intercept of X2 at T2
selfes_par3_t3 ~ m3*1     # This estimates the intercept of X3 at T2
'
fit_mi_lcs_selfes_hyp2_fu <- lavaan(mi_lcs_selfes_hyp2_fu, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_selfes_hyp2_fu, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_selfes_hyp2_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
579 15 5982.84 6048.26 1 0 0.015
# parameters of interest
params_lcs_selfes_hyp2_fu <- broom::tidy(fit_mi_lcs_selfes_hyp2_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("selfes_t3 ~ selfes_t2", "d_selfes_1 =~ selfes_t3", "selfes_t2 ~~ d_selfes_1", # change parameters
                           "d_selfes_1 ~1 ", "selfes_t2 ~1 ", "", # means
                           "d_selfes_1 ~~ d_selfes_1")) # variances

kable(params_lcs_selfes_hyp2_fu, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
selfes_t3 ~ selfes_t2 1.000 1.000 1.000 0.973 NA NA
d_selfes_1 =~ selfes_t3 1.000 1.000 1.000 0.499 NA NA
d_selfes_1 ~1 0.052 -0.012 0.116 0.143 2.697 0.007
selfes_t2 ~1 3.814 3.703 3.925 5.329 113.354 0.000
d_selfes_1 ~~ d_selfes_1 0.135 0.080 0.189 1.000 8.126 0.000
selfes_t2 ~~ d_selfes_1 -0.053 -0.100 -0.006 -0.201 -3.674 0.000

Self-esteem further increased from T2 to the T3 follow up, b = 0.052, beta = 0.06, p = 0.007.

6.2.2.4 Self concept clarity

Fit model:

Show the code
# Code snippets adapted from Kievit et al. (2018) -- CC-BY -- https://doi.org/10.1016/j.dcn.2017.11.007

# Fit the multiple indicator Univariate Latent Change Score model
mi_lcs_concept_hyp2_fu <- '
concept_t2 =~ 1*concept_par1_t2 + lamb2*concept_par2_t2 + lamb3*concept_par3_t2 # This specifies the measurement model for concept_t2 
concept_t3 =~ 1*concept_par1_t3 + lamb2*concept_par2_t3 + lamb3*concept_par3_t3 # This specifies the measurement model for concept_t3 with the equality constrained factor loadings

concept_t3 ~ 1*concept_t2     # This parameter regresses concept_t3 perfectly on concept_t2
d_concept_1 =~ 1*concept_t3   # This defines the latent change score factor as measured perfectly by scores on concept_t3
concept_t3 ~ 0*1              # This line constrains the intercept of concept_t3 to 0
concept_t3 ~~ 0*concept_t3    # This fixes the variance of concept_t3 to 0

d_concept_1 ~ 1              # This estimates the intercept of the change score 
concept_t2 ~ 1               # This estimates the intercept of concept_t2 
d_concept_1 ~~ d_concept_1   # This estimates the variance of the change scores 
concept_t2 ~~ concept_t2     # This estimates the variance of the concept_t2 
concept_t2 ~~ d_concept_1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

concept_par1_t2 ~~ concept_par1_t3   # This allows residual covariance on indicator X1 across T1 and T2
concept_par2_t2 ~~ concept_par2_t3   # This allows residual covariance on indicator X2 across T1 and T2
concept_par3_t2 ~~ concept_par3_t3   # This allows residual covariance on indicator X3 across T1 and T2

concept_par1_t2 ~~ res1*concept_par1_t2   # This allows residual variance on indicator X1 at T1 
concept_par2_t2 ~~ res2*concept_par2_t2   # This allows residual variance on indicator X2 at T1
concept_par3_t2 ~~ res3*concept_par3_t2   # This allows residual variance on indicator X3 at T1

concept_par1_t3 ~~ res1*concept_par1_t3  # This allows residual variance on indicator X1 at T2 
concept_par2_t3 ~~ res2*concept_par2_t3  # This allows residual variance on indicator X2 at T2 
concept_par3_t3 ~~ res3*concept_par3_t3  # This allows residual variance on indicator X3 at T2

concept_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
concept_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T1
concept_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T1

concept_par1_t3 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
concept_par2_t3 ~ m2*1     # This estimates the intercept of X2 at T2
concept_par3_t3 ~ m3*1     # This estimates the intercept of X3 at T2
'
fit_mi_lcs_concept_hyp2_fu <- lavaan(mi_lcs_concept_hyp2_fu, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_concept_hyp2_fu, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_concept_hyp2_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
579 15 6175.822 6241.241 0.996 0.042 0.019
# parameters of interest
params_lcs_concept_hyp2_fu <- broom::tidy(fit_mi_lcs_concept_hyp2_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("concept_t3 ~ concept_t2", "d_concept_1 =~ concept_t3", "concept_t2 ~~ d_concept_1", # change parameters
                           "d_concept_1 ~1 ", "concept_t2 ~1 ", "", # means
                           "d_concept_1 ~~ d_concept_1")) # variances

kable(params_lcs_concept_hyp2_fu, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
concept_t3 ~ concept_t2 1.000 1.000 1.000 0.969 NA NA
d_concept_1 =~ concept_t3 1.000 1.000 1.000 0.600 NA NA
d_concept_1 ~1 0.043 -0.023 0.108 0.108 2.135 0.033
concept_t2 ~1 3.226 3.121 3.330 5.063 101.242 0.000
d_concept_1 ~~ d_concept_1 0.156 0.090 0.221 1.000 7.866 0.000
concept_t2 ~~ d_concept_1 -0.064 -0.109 -0.020 -0.257 -4.729 0.000

Self concept clarity further increased from T2 to the T3 follow up, b = 0.043, beta = 0.048, p = 0.033.

I also checked whether there are differences if I model the two intervention groups (self-improvement / self-acceptance) separately. Changes are more or less the same across the two groups.


6.3 H3: Distance between ideal- and current-personality over time (H1 in paper)

The distance between ideal- and current-personality will decrease in both intervention groups (but not in the control group between T1 and T2).

We will use two strategies to test this hypothesis. First, we will compute the Fisher z-transformed profile correlation between current- and ideal-personality and test whether it increased across assessments. Second, we will test whether the squared difference between current- and ideal-personality rating for each Big Five trait decreased across assessments. We will test mean-level differences in profile correlations and squared differences between baseline and follow up using mixed-effects models. Our main focus will be changes from T1 to T2 and we will check in a second set of models whether any changes persist from T2 to T3.

6.3.1 Profile similarity

Reshape to wide:

Show the code
# reshape to wide
df_sbsa2_wide_profdiff <- df_sbsa2 %>% 
  arrange(pid, time) %>% 
  select(pid, rando, time, profile_corr_item_z, profile_corr_facet_z, ends_with("_sqdiff")) %>% 
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = -c(pid, rando, time))
6.3.1.1 Intervention effects (changes from T1 to T2)

Checking assumptions

# item-level profile correlation
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t2) -
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t1)) 

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(profile_corr_item_z_t2) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(profile_corr_item_z_t1)
W = 0.93322, p-value = 2.657e-15
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t2) -
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t1))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(profile_corr_item_z_t2) - df_sbsa2_wide_profdiff %>%     filter(rando != "Waitlist-Control") %>% pull(profile_corr_item_z_t1)
D = 0.078375, p-value = 6.384e-09
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t1))
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 671 0.42 0.49   0.38    0.39 0.47 -1.09 3.39  4.48 0.81     2.34 0.02
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t2))
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 575 0.56 0.49   0.53    0.54 0.51 -1.07 2.17  3.23 0.27     0.02 0.02
# facet-level profile correlation
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t2) -
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t1)) 

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(profile_corr_facet_z_t2) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(profile_corr_facet_z_t1)
W = 0.93724, p-value = 8.082e-15
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t2) -
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t1))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(profile_corr_facet_z_t2) - df_sbsa2_wide_profdiff %>%     filter(rando != "Waitlist-Control") %>% pull(profile_corr_facet_z_t1)
D = 0.080938, p-value = 1.393e-09
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t1))
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 672 0.35 0.66   0.29    0.31 0.64 -1.23 3.77     5 0.69     1.04 0.03
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t2))
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 576 0.52 0.66   0.47    0.49 0.66 -1.34 3.09  4.43 0.37     0.02 0.03

Results summary:

t_profile_corr_item <- t.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t2),
                              df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t1), 
                              paired = TRUE)
t_profile_corr_facet <- t.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t2), 
                               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t1), 
                               paired = TRUE)

kable(bind_rows(tidy(t_profile_corr_item), tidy(t_profile_corr_facet)) %>% mutate(outcome = c("Item-level profile corr.", "Facet-level profile corr.")) %>% select(outcome, everything()), digits = 3)
outcome estimate statistic p.value parameter conf.low conf.high method alternative
Item-level profile corr. 0.131 8.684 0 571 0.101 0.160 Paired t-test two.sided
Facet-level profile corr. 0.169 8.395 0 573 0.129 0.208 Paired t-test two.sided
# effect sizes
d_profile_corr_item <- psych::cohen.d(profile_corr_item_z ~ time, data = df_sbsa2 %>% 
                                        filter(rando!="Waitlist-Control" & time %in% c(1,2)))
d_profile_corr_item$cohen.d
                        lower    effect     upper
profile_corr_item_z 0.1668914 0.2788659 0.3907299
d_profile_corr_facet <- psych::cohen.d(profile_corr_facet_z ~ time, data = df_sbsa2 %>% 
                                         filter(rando!="Waitlist-Control" & time %in% c(1,2)))
d_profile_corr_facet$cohen.d
                         lower    effect     upper
profile_corr_facet_z 0.1475916 0.2593992 0.3711035

Significantly higher profile correlations at the second measurement occasion, both for the item-level profile correlation and the facet-level profile correlations.

What happens in the waitlist control group during this time?

t_profile_corr_item_cg <- t.test(df_sbsa2_wide_profdiff %>% filter(rando=="Waitlist-Control") %>% pull(profile_corr_item_z_t2),
                              df_sbsa2_wide_profdiff %>% filter(rando=="Waitlist-Control") %>% pull(profile_corr_item_z_t1), 
                              paired = TRUE)
t_profile_corr_facet_cg <- t.test(df_sbsa2_wide_profdiff %>% filter(rando=="Waitlist-Control") %>% pull(profile_corr_facet_z_t2), 
                               df_sbsa2_wide_profdiff %>% filter(rando=="Waitlist-Control") %>% pull(profile_corr_facet_z_t1), 
                               paired = TRUE)

kable(bind_rows(tidy(t_profile_corr_item_cg), tidy(t_profile_corr_facet_cg)) %>% mutate(outcome = c("Item-level profile corr.", "Facet-level profile corr.")) %>% select(outcome, everything()), digits = 5)
outcome estimate statistic p.value parameter conf.low conf.high method alternative
Item-level profile corr. 0.10158 3.36943 0.00097 145 0.0420 0.16117 Paired t-test two.sided
Facet-level profile corr. 0.12900 3.24385 0.00146 145 0.0504 0.20760 Paired t-test two.sided
# effect sizes
d_profile_corr_item_cg <- psych::cohen.d(profile_corr_item_z ~ time, data = df_sbsa2 %>% 
                                        filter(rando=="Waitlist-Control" & time %in% c(1,2)))
d_profile_corr_item_cg$cohen.d
                          lower    effect     upper
profile_corr_item_z -0.02087351 0.1993958 0.4193518
d_profile_corr_facet_cg <- psych::cohen.d(profile_corr_facet_z ~ time, data = df_sbsa2 %>% 
                                         filter(rando=="Waitlist-Control" & time %in% c(1,2)))
d_profile_corr_facet_cg$cohen.d
                           lower    effect     upper
profile_corr_facet_z -0.04429333 0.1758341 0.3956873

Slightly higher higher profile correlations at the second measurement occasion also in the controlg group, although this is only significant at .001 for the item-level profile correlation but not for the facet-level profile correlations.

Testing the difference between intervention groups and control group for significance:

df_sbsa2_anov <- df_sbsa2 %>% 
  mutate(interv = ifelse(rando!="Waitlist-Control", 1, 0)) %>% 
  filter(time!=3) %>% 
  select(pid, interv, time, profile_corr_item_z, profile_corr_facet_z) %>% 
  mutate(time_d = time - 1)

anov_interv_contr_item <- lmerTest::lmer(profile_corr_item_z ~ time_d * interv + (1 | pid), 
                                         data = df_sbsa2_anov)
kable(summary(anov_interv_contr_item)$coefficients, digits = 3)
Estimate Std. Error df t value Pr(>|t|)
(Intercept) 0.429 0.038 1056.988 11.289 0.000
time_d 0.103 0.030 744.495 3.488 0.001
interv -0.011 0.043 1056.811 -0.262 0.793
time_d:interv 0.029 0.033 743.937 0.879 0.380
effectsize::standardize_parameters(anov_interv_contr_item, 
                       method = "pseudo", ci_method = "satterthwaite", ci = 0.999)
# Standardization method: pseudo

Parameter     | Std. Coef. |      99.9% CI
------------------------------------------
(Intercept)   |       0.00 | [ 0.00, 0.00]
time_d        |       0.19 | [ 0.01, 0.37]
interv        |      -0.01 | [-0.14, 0.12]
time_d:interv |       0.05 | [-0.14, 0.25]
anov_interv_contr_facet <- lmerTest::lmer(profile_corr_facet_z ~ time_d * interv + (1 | pid), 
                                         data = df_sbsa2_anov)
kable(summary(anov_interv_contr_facet)$coefficients, digits = 3)
Estimate Std. Error df t value Pr(>|t|)
(Intercept) 0.351 0.051 1053.708 6.861 0.000
time_d 0.129 0.039 746.516 3.269 0.001
interv -0.005 0.057 1053.327 -0.090 0.929
time_d:interv 0.040 0.044 745.835 0.911 0.362
effectsize::standardize_parameters(anov_interv_contr_facet, 
                       method = "pseudo", ci_method = "satterthwaite", ci = 0.999)
# Standardization method: pseudo

Parameter     | Std. Coef. |      99.9% CI
------------------------------------------
(Intercept)   |       0.00 | [ 0.00, 0.00]
time_d        |       0.18 | [ 0.00, 0.36]
interv        |  -3.61e-03 | [-0.14, 0.13]
time_d:interv |       0.05 | [-0.14, 0.25]

Higher effect size of change in the intervention groups versus the waitlist control group from T1 to T2 but this difference is not significant. Might have something to do though with different group sizes. Note that this is a rather basic method of standardizing multilevel modeling parameters.

6.3.1.2 Follow-up effects (changes from T2 to T3)

Checking assumptions

# item-level profile correlation
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t3) -
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t2))

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(profile_corr_item_z_t3) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(profile_corr_item_z_t2)
W = 0.91279, p-value < 2.2e-16
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t3) -
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t2))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(profile_corr_item_z_t3) - df_sbsa2_wide_profdiff %>%     filter(rando != "Waitlist-Control") %>% pull(profile_corr_item_z_t2)
D = 0.062819, p-value = 5.247e-05
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t2))
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 575 0.56 0.49   0.53    0.54 0.51 -1.07 2.17  3.23 0.27     0.02 0.02
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t3))
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 514 0.61 0.55   0.57    0.59 0.55 -1.22 3.34  4.56 0.48      1.4 0.02
# facet-level profile correlation
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t3) -
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t2))

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(profile_corr_facet_z_t3) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(profile_corr_facet_z_t2)
W = 0.92574, p-value = 3.207e-15
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t3) -
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t2))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(profile_corr_facet_z_t3) - df_sbsa2_wide_profdiff %>%     filter(rando != "Waitlist-Control") %>% pull(profile_corr_facet_z_t2)
D = 0.067574, p-value = 7.904e-06
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t2))
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 576 0.52 0.66   0.47    0.49 0.66 -1.34 3.09  4.43 0.37     0.02 0.03
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t3))
   vars   n mean   sd median trimmed  mad  min  max range skew kurtosis   se
X1    1 514 0.59 0.72   0.54    0.56 0.71 -1.7 3.72  5.42 0.47     0.54 0.03

Results summary:

t_profile_corr_item_fu <- t.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t3), 
                                 df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_item_z_t2), 
                                 paired = TRUE)
t_profile_corr_facet_fu <- t.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t3), 
                                  df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(profile_corr_facet_z_t2), 
                                  paired = TRUE)

kable(bind_rows(tidy(t_profile_corr_item_fu), tidy(t_profile_corr_facet_fu)) %>% mutate(outcome = c("Item-level profile corr.", "Facet-level profile corr.")) %>% select(outcome, everything()), digits = 3)
outcome estimate statistic p.value parameter conf.low conf.high method alternative
Item-level profile corr. 0.040 2.583 0.010 511 0.010 0.071 Paired t-test two.sided
Facet-level profile corr. 0.066 3.097 0.002 511 0.024 0.108 Paired t-test two.sided
# effect sizes
d_profile_corr_item_fu <- psych::cohen.d(profile_corr_item_z ~ time, data = df_sbsa2 %>% 
                                           filter(rando!="Waitlist-Control" & time %in% c(2,3)))
d_profile_corr_item_fu$cohen.d
                          lower    effect     upper
profile_corr_item_z -0.01900003 0.1000698 0.2190937
d_profile_corr_facet_fu <- psych::cohen.d(profile_corr_facet_z ~ time, data = df_sbsa2 %>% 
                                            filter(rando!="Waitlist-Control" & time %in% c(2,3)))
d_profile_corr_facet_fu$cohen.d
                           lower    effect     upper
profile_corr_facet_z -0.01257597 0.1064569 0.2254401

Profile correlations stay stable from the second measurement occasion to the third when evaluated at alpha=.001, both for the item-level profile correlations and the facet-level profile correlations. Slight increase if looking at effect sizes.

6.3.1.3 Summary plot
profile_df_plot <- df_sbsa2 %>% 
  select(pid, time, rando, profile_corr_item_z, profile_corr_facet_z) %>% 
  pivot_longer(-c(pid, time, rando), names_to = "itemfacet", values_to = "corr") %>% 
  filter(!is.na(corr)) %>% 
  mutate(itemfacet2 = fct_recode(itemfacet, "Item-level" = "profile_corr_item_z", "Facet-level" = "profile_corr_facet_z"),
         itemfacet2 = fct_reorder(itemfacet2, corr, .desc = F))

cowplot::plot_grid(
  ggplot(profile_df_plot %>% filter(rando!="Waitlist-Control")) + 
  aes(x = as.factor(time), y = corr) + 
  geom_boxplot() + 
  geom_violin(fill = NA) +
  facet_wrap(vars(itemfacet2)) +
  labs(x = "Measurement Occasion", y = "Profile correlation", 
       title = "Intervention groups") + 
  theme_bw(),
  ggplot(profile_df_plot %>% filter(rando=="Waitlist-Control")) + 
  aes(x = as.factor(time), y = corr) + 
  geom_boxplot() + 
  geom_violin(fill = NA) +
  facet_wrap(vars(itemfacet2)) +
  labs(x = "Measurement Occasion", y = "Profile correlation", 
       title = "Waitlist control group") + 
  theme_bw(),
  ncol = 1, align = "vt"
)

Significantly higher profile correlations at the second measurement occasion, both for the item-level profile correlation and the facet-level profile correlations. Further increases (but only slightly) at the T3 follow-up. However, we also see a pattern of increases in the waitlist control group although with higher uncertainty of estimates (smaller sample). We would not have expected that from T1 to T2, but only from T2 to T3.

6.3.2 Individual traits: squared differences

6.3.2.1 Intervention effects (changes from T1 to T2)

Checking assumptions

# extra
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(extra_sqdiff_t2) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(extra_sqdiff_t1))

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(extra_sqdiff_t2) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(extra_sqdiff_t1)
W = 0.90382, p-value < 2.2e-16
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(extra_sqdiff_t2) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(extra_sqdiff_t1))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(extra_sqdiff_t2) - df_sbsa2_wide_profdiff %>% filter(rando !=     "Waitlist-Control") %>% pull(extra_sqdiff_t1)
D = 0.12962, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(extra_sqdiff_t1))
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 674 1.84 1.98   1.17     1.5 1.48   0 11.67 11.67 1.57     2.63 0.08
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(extra_sqdiff_t2))
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 577 1.47 1.71   0.84    1.14 1.07   0 10.03 10.03 1.87     3.83 0.07
# agree
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(agree_sqdiff_t2) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(agree_sqdiff_t1))

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(agree_sqdiff_t2) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(agree_sqdiff_t1)
W = 0.75936, p-value < 2.2e-16
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(agree_sqdiff_t2) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(agree_sqdiff_t1))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(agree_sqdiff_t2) - df_sbsa2_wide_profdiff %>% filter(rando !=     "Waitlist-Control") %>% pull(agree_sqdiff_t1)
D = 0.16923, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(agree_sqdiff_t1))
   vars   n mean   sd median trimmed  mad min  max range skew kurtosis   se
X1    1 673  0.5 0.81   0.17    0.33 0.25   0 7.56  7.56 3.64    20.07 0.03
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(agree_sqdiff_t2))
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 577 0.39 0.83   0.11    0.24 0.16   0 12.84 12.84 7.93    97.34 0.03
# consc
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(consc_sqdiff_t2) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(consc_sqdiff_t1))

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(consc_sqdiff_t2) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(consc_sqdiff_t1)
W = 0.87992, p-value < 2.2e-16
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(consc_sqdiff_t2) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(consc_sqdiff_t1))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(consc_sqdiff_t2) - df_sbsa2_wide_profdiff %>% filter(rando !=     "Waitlist-Control") %>% pull(consc_sqdiff_t1)
D = 0.12582, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(consc_sqdiff_t1))
   vars   n mean   sd median trimmed  mad min max range skew kurtosis   se
X1    1 674  1.7 2.03      1    1.31 1.32   0  16    16 2.08      6.1 0.08
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(consc_sqdiff_t2))
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 577 1.46 1.85   0.84     1.1 1.15   0 14.06 14.06 2.19     6.64 0.08
# neuro
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(neuro_sqdiff_t2) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(neuro_sqdiff_t1))

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(neuro_sqdiff_t2) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(neuro_sqdiff_t1)
W = 0.88583, p-value < 2.2e-16
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(neuro_sqdiff_t2) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(neuro_sqdiff_t1))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(neuro_sqdiff_t2) - df_sbsa2_wide_profdiff %>% filter(rando !=     "Waitlist-Control") %>% pull(neuro_sqdiff_t1)
D = 0.14624, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(neuro_sqdiff_t1))
   vars   n mean   sd median trimmed  mad min max range skew kurtosis   se
X1    1 674 3.36 3.44   2.25    2.79 2.68   0  16    16 1.34     1.27 0.13
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(neuro_sqdiff_t2))
   vars   n mean   sd median trimmed  mad min max range skew kurtosis   se
X1    1 577 2.66 2.97   1.56    2.11 1.95   0  16    16 1.64      2.6 0.12
# openn
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(openn_sqdiff_t2) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(openn_sqdiff_t1))

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(openn_sqdiff_t2) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(openn_sqdiff_t1)
W = 0.63533, p-value < 2.2e-16
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(openn_sqdiff_t2) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(openn_sqdiff_t1))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(openn_sqdiff_t2) - df_sbsa2_wide_profdiff %>% filter(rando !=     "Waitlist-Control") %>% pull(openn_sqdiff_t1)
D = 0.19368, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(openn_sqdiff_t1))
   vars   n mean   sd median trimmed  mad min  max range skew kurtosis   se
X1    1 673 0.47 0.92   0.11    0.27 0.16   0 9.51  9.51 4.59    29.24 0.04
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(openn_sqdiff_t2))
   vars   n mean   sd median trimmed  mad min  max range skew kurtosis   se
X1    1 576 0.39 0.69   0.11    0.23 0.16   0 6.25  6.25 4.03    22.73 0.03

Results summary:

mod_traits_sqdiff <- df_sbsa2_wide_profdiff %>% 
  filter(rando!="Waitlist-Control") %>% 
  select(-starts_with("profile"), -rando, -ends_with("_t3")) %>% 
  pivot_longer(-c(pid), 
               names_to = c("test", "time"), values_to = "score", 
               names_pattern = "(.*)_(t1|t2)") %>% 
  filter(!is.na(score)) %>% 
  group_by(pid, test) %>% 
  mutate(assessments = n()) %>% 
  ungroup() %>% 
  filter(assessments==2) %>% 
  select(-assessments) %>% 
  group_nest(test) %>% 
  mutate(t_tests = map(data, ~t.test(score ~ relevel(as.factor(time), "t2"), # need to relevel this to get T2-T1 diff (not sure why)
                                     data = .x, paired = TRUE, conf.level = 0.999))) %>% 
  pull(t_tests) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

mod_traits_unlist <- mod_traits_sqdiff[[1]] %>% tidy()
for (i in 2:length(mod_traits_sqdiff)) {
  mod_traits_unlist <- bind_rows(mod_traits_unlist, mod_traits_sqdiff[[i]] %>% tidy())
}

kable(mod_traits_unlist %>% mutate(outcome = sort(names(b5_vars))) %>% 
        select(outcome, everything()) %>% arrange(factor(outcome, levels = (names(b5_vars)))), digits = 3) # order by BFI traits
outcome estimate statistic p.value parameter conf.low conf.high method alternative
extraversion -0.372 -6.354 0.000 576 -0.566 -0.178 Paired t-test two.sided
agreeableness -0.097 -3.536 0.000 575 -0.188 -0.006 Paired t-test two.sided
conscientiousness -0.169 -2.890 0.004 576 -0.363 0.024 Paired t-test two.sided
neuroticism -0.697 -6.865 0.000 576 -1.033 -0.361 Paired t-test two.sided
openness -0.076 -2.587 0.010 574 -0.173 0.021 Paired t-test two.sided
sociability -0.782 -7.573 0.000 574 -1.124 -0.441 Paired t-test two.sided
assertiveness -0.239 -3.030 0.003 573 -0.500 0.022 Paired t-test two.sided
energy -0.337 -3.541 0.000 575 -0.651 -0.022 Paired t-test two.sided
compassion -0.118 -2.769 0.006 575 -0.258 0.023 Paired t-test two.sided
respectfulness -0.012 -0.321 0.749 572 -0.136 0.112 Paired t-test two.sided
trust -0.329 -4.856 0.000 574 -0.553 -0.105 Paired t-test two.sided
organization -0.149 -1.777 0.076 575 -0.427 0.129 Paired t-test two.sided
productiveness -0.453 -4.519 0.000 572 -0.784 -0.121 Paired t-test two.sided
responsibility -0.139 -2.065 0.039 573 -0.361 0.083 Paired t-test two.sided
anxiety -0.681 -4.592 0.000 576 -1.171 -0.190 Paired t-test two.sided
depression -0.887 -7.570 0.000 574 -1.275 -0.500 Paired t-test two.sided
volatility -0.603 -4.782 0.000 576 -1.020 -0.186 Paired t-test two.sided
curiosity -0.044 -1.039 0.299 573 -0.186 0.097 Paired t-test two.sided
aesthetic -0.053 -1.359 0.175 572 -0.183 0.076 Paired t-test two.sided
imagination -0.215 -3.559 0.000 574 -0.415 -0.015 Paired t-test two.sided
# effect sizes
cohend_cust = function(outcome, df) {
  form = as.formula(paste0(outcome, " ~ time"))
  psych::cohen.d(form, data = df, alpha = 0.001)
}

d_trait <- cohend_cust(paste0(str_trunc(names(b5_vars)[1], 5, ellipsis = ""), "_sqdiff"), 
                       df_sbsa2 %>% filter(rando!="Waitlist-Control" & time %in% c(1,2)))
d_traits_unlist <- as_tibble(d_trait$cohen.d)
for (i in 2:length(names(b5_vars))) {
  d_trait <- cohend_cust(paste0(str_trunc(names(b5_vars)[i], 5, ellipsis = ""), "_sqdiff"), 
                         df_sbsa2 %>% filter(rando!="Waitlist-Control" & time %in% c(1,2)))
  d_traits_unlist <- bind_rows(d_traits_unlist, as_tibble(d_trait$cohen.d))
}
kable(d_traits_unlist %>% mutate(outcome = names(b5_vars)) %>% select(outcome, everything()), digits = 3)
outcome lower effect upper
extraversion -0.386 -0.199 -0.012
agreeableness -0.322 -0.135 0.051
conscientiousness -0.311 -0.124 0.063
neuroticism -0.404 -0.217 -0.030
openness -0.288 -0.101 0.086
sociability -0.421 -0.233 -0.046
assertiveness -0.295 -0.108 0.079
energy -0.344 -0.157 0.030
compassion -0.306 -0.120 0.067
respectfulness -0.249 -0.062 0.125
trust -0.378 -0.191 -0.004
organization -0.278 -0.091 0.096
productiveness -0.362 -0.174 0.013
responsibility -0.299 -0.112 0.075
anxiety -0.347 -0.160 0.027
depression -0.427 -0.240 -0.052
volatility -0.359 -0.172 0.015
curiosity -0.236 -0.049 0.137
aesthetic -0.253 -0.066 0.121
imagination -0.311 -0.124 0.063

[Note: These CIs for d are probably “wrong” -> not appropriate for paired t-test]

Significantly lower squared mean-level differences at the second measurement occasion for extraversion, agreeableness, and neuroticism (at .001). For conscientiousness and openness only at p < .01. On the level of the 15 BFI-2 facets, we find 8 significant effects (at .001) where squared mean-level differences were reduced. For example, pronounced effect for energy but no effect for assertiveness.

What happens in the waitlist control group during this time?

mod_traits_sqdiff_cg <- df_sbsa2_wide_profdiff %>% 
  filter(rando=="Waitlist-Control") %>% 
  select(-starts_with("profile"), -rando, -ends_with("_t3")) %>% 
  pivot_longer(-c(pid), 
               names_to = c("test", "time"), values_to = "score", 
               names_pattern = "(.*)_(t1|t2)") %>% 
  filter(!is.na(score)) %>% 
  group_by(pid, test) %>% 
  mutate(assessments = n()) %>% 
  ungroup() %>% 
  filter(assessments==2) %>% 
  select(-assessments) %>% 
  group_nest(test) %>% 
  mutate(t_tests = map(data, ~t.test(score ~ relevel(as.factor(time), "t2"), # need to relevel this to get T2-T1 diff (not sure why)
                                     data = .x, paired = TRUE, conf.level = 0.999))) %>% 
  pull(t_tests) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

mod_traits_unlist_cg <- mod_traits_sqdiff_cg[[1]] %>% tidy()
for (i in 2:length(mod_traits_sqdiff_cg)) {
  mod_traits_unlist_cg <- bind_rows(mod_traits_unlist_cg, mod_traits_sqdiff_cg[[i]] %>% tidy())
}

kable(mod_traits_unlist_cg %>% mutate(outcome = sort(names(b5_vars))) %>% 
        select(outcome, everything()) %>% arrange(factor(outcome, levels = (names(b5_vars)))), digits = 3) # order by BFI traits
outcome estimate statistic p.value parameter conf.low conf.high method alternative
extraversion -0.371 -2.622 0.010 145 -0.846 0.104 Paired t-test two.sided
agreeableness -0.158 -2.381 0.019 145 -0.382 0.065 Paired t-test two.sided
conscientiousness -0.347 -3.151 0.002 145 -0.718 0.023 Paired t-test two.sided
neuroticism -0.600 -3.067 0.003 145 -1.257 0.057 Paired t-test two.sided
openness -0.052 -1.042 0.299 145 -0.219 0.116 Paired t-test two.sided
sociability -0.451 -2.337 0.021 145 -1.100 0.197 Paired t-test two.sided
assertiveness -0.375 -1.927 0.056 145 -1.027 0.278 Paired t-test two.sided
energy -0.495 -2.212 0.029 145 -1.246 0.256 Paired t-test two.sided
compassion -0.268 -2.470 0.015 145 -0.631 0.096 Paired t-test two.sided
respectfulness -0.092 -1.222 0.224 145 -0.347 0.162 Paired t-test two.sided
trust -0.213 -1.634 0.104 145 -0.650 0.224 Paired t-test two.sided
organization -0.556 -3.541 0.001 145 -1.084 -0.029 Paired t-test two.sided
productiveness -0.544 -3.182 0.002 145 -1.119 0.030 Paired t-test two.sided
responsibility -0.304 -2.500 0.014 145 -0.713 0.105 Paired t-test two.sided
anxiety -0.625 -2.144 0.034 145 -1.603 0.354 Paired t-test two.sided
depression -0.745 -3.091 0.002 145 -1.555 0.064 Paired t-test two.sided
volatility -0.596 -2.357 0.020 145 -1.445 0.253 Paired t-test two.sided
curiosity -0.068 -1.089 0.278 145 -0.276 0.141 Paired t-test two.sided
aesthetic -0.036 -0.363 0.717 145 -0.368 0.297 Paired t-test two.sided
imagination -0.074 -0.569 0.570 145 -0.508 0.361 Paired t-test two.sided
# effect sizes
d_trait_cg <- cohend_cust(paste0(str_trunc(names(b5_vars)[1], 5, ellipsis = ""), "_sqdiff"), 
                       df_sbsa2 %>% filter(rando=="Waitlist-Control" & time %in% c(1,2)))
d_traits_unlist_cg <- as_tibble(d_trait_cg$cohen.d)
for (i in 2:length(names(b5_vars))) {
  d_trait_cg <- cohend_cust(paste0(str_trunc(names(b5_vars)[i], 5, ellipsis = ""), "_sqdiff"), 
                         df_sbsa2 %>% filter(rando=="Waitlist-Control" & time %in% c(1,2)))
  d_traits_unlist_cg <- bind_rows(d_traits_unlist_cg, as_tibble(d_trait_cg$cohen.d))
}
kable(d_traits_unlist_cg %>% mutate(outcome = names(b5_vars)) %>% select(outcome, everything()), digits = 3)
outcome lower effect upper
extraversion -0.564 -0.195 0.175
agreeableness -0.559 -0.190 0.180
conscientiousness -0.583 -0.214 0.156
neuroticism -0.529 -0.160 0.210
openness -0.459 -0.090 0.279
sociability -0.538 -0.169 0.201
assertiveness -0.515 -0.146 0.223
energy -0.560 -0.191 0.179
compassion -0.630 -0.260 0.110
respectfulness -0.487 -0.118 0.251
trust -0.445 -0.076 0.292
organization -0.586 -0.216 0.153
productiveness -0.554 -0.185 0.185
responsibility -0.576 -0.206 0.163
anxiety -0.504 -0.135 0.234
depression -0.535 -0.166 0.203
volatility -0.503 -0.134 0.235
curiosity -0.471 -0.102 0.267
aesthetic -0.447 -0.079 0.290
imagination -0.410 -0.042 0.327

In the control group, significantly lower squared mean-level differences at the second measurement occasion only for facet organization (at .001). For extraversion, agreeableness, conscientiousness, and neuroticism only at p < .05 (as well as for 8 facets). However, in terms of effect sizes, relatively similar effects to intervention group.

6.3.2.2 Follow-up effects (changes from T2 to T3)

Checking assumptions

# extra
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(extra_sqdiff_t3) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(extra_sqdiff_t2))

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(extra_sqdiff_t3) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(extra_sqdiff_t2)
W = 0.91718, p-value = 3.875e-16
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(extra_sqdiff_t3) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(extra_sqdiff_t2))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(extra_sqdiff_t3) - df_sbsa2_wide_profdiff %>% filter(rando !=     "Waitlist-Control") %>% pull(extra_sqdiff_t2)
D = 0.12883, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(extra_sqdiff_t2))
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 577 1.47 1.71   0.84    1.14 1.07   0 10.03 10.03 1.87     3.83 0.07
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(extra_sqdiff_t3))
   vars   n mean   sd median trimmed  mad min max range skew kurtosis   se
X1    1 514 1.37 1.65   0.69    1.06 0.94   0   9     9 1.84     3.81 0.07
# agree
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(agree_sqdiff_t3) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(agree_sqdiff_t2))

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(agree_sqdiff_t3) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(agree_sqdiff_t2)
W = 0.70258, p-value < 2.2e-16
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(agree_sqdiff_t3) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(agree_sqdiff_t2))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(agree_sqdiff_t3) - df_sbsa2_wide_profdiff %>% filter(rando !=     "Waitlist-Control") %>% pull(agree_sqdiff_t2)
D = 0.17613, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(agree_sqdiff_t2))
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 577 0.39 0.83   0.11    0.24 0.16   0 12.84 12.84 7.93    97.34 0.03
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(agree_sqdiff_t3))
   vars   n mean   sd median trimmed  mad min max range skew kurtosis   se
X1    1 514 0.36 0.68   0.11    0.23 0.16   0   9     9 6.09    59.52 0.03
# consc
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(consc_sqdiff_t3) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(consc_sqdiff_t2))

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(consc_sqdiff_t3) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(consc_sqdiff_t2)
W = 0.81404, p-value < 2.2e-16
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(consc_sqdiff_t3) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(consc_sqdiff_t2))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(consc_sqdiff_t3) - df_sbsa2_wide_profdiff %>% filter(rando !=     "Waitlist-Control") %>% pull(consc_sqdiff_t2)
D = 0.15513, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(consc_sqdiff_t2))
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 577 1.46 1.85   0.84     1.1 1.15   0 14.06 14.06 2.19     6.64 0.08
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(consc_sqdiff_t3))
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 514 1.35 1.81   0.69    0.98 0.96   0 11.67 11.67 2.39        7 0.08
# neuro
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(neuro_sqdiff_t3) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(neuro_sqdiff_t2))

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(neuro_sqdiff_t3) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(neuro_sqdiff_t2)
W = 0.9264, p-value = 3.804e-15
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(neuro_sqdiff_t3) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(neuro_sqdiff_t2))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(neuro_sqdiff_t3) - df_sbsa2_wide_profdiff %>% filter(rando !=     "Waitlist-Control") %>% pull(neuro_sqdiff_t2)
D = 0.13798, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(neuro_sqdiff_t2))
   vars   n mean   sd median trimmed  mad min max range skew kurtosis   se
X1    1 577 2.66 2.97   1.56    2.11 1.95   0  16    16 1.64      2.6 0.12
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(neuro_sqdiff_t3))
   vars   n mean   sd median trimmed mad min max range skew kurtosis   se
X1    1 514 2.44 2.76   1.36    1.95 1.7   0  16    16 1.83     4.04 0.12
# openn
shapiro.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(openn_sqdiff_t3) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(openn_sqdiff_t2))

    Shapiro-Wilk normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(openn_sqdiff_t3) - df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>% pull(openn_sqdiff_t2)
W = 0.7161, p-value < 2.2e-16
lillie.test(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(openn_sqdiff_t3) - 
               df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(openn_sqdiff_t2))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa2_wide_profdiff %>% filter(rando != "Waitlist-Control") %>%     pull(openn_sqdiff_t3) - df_sbsa2_wide_profdiff %>% filter(rando !=     "Waitlist-Control") %>% pull(openn_sqdiff_t2)
D = 0.19517, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(openn_sqdiff_t2))
   vars   n mean   sd median trimmed  mad min  max range skew kurtosis   se
X1    1 576 0.39 0.69   0.11    0.23 0.16   0 6.25  6.25 4.03    22.73 0.03
psych::describe(df_sbsa2_wide_profdiff %>% filter(rando!="Waitlist-Control") %>% pull(openn_sqdiff_t3))
   vars   n mean  sd median trimmed  mad min   max range skew kurtosis   se
X1    1 514 0.42 0.9   0.11    0.23 0.16   0 11.67 11.67 6.54    62.09 0.04

Results summary:

mod_traits_sqdiff_fu <- df_sbsa2_wide_profdiff %>% 
  filter(rando!="Waitlist-Control") %>% 
  select(-starts_with("profile"), -rando, -ends_with("_t1")) %>% 
  pivot_longer(-c(pid), 
               names_to = c("test", "time"), values_to = "score", 
               names_pattern = "(.*)_(t2|t3)") %>% 
  filter(!is.na(score)) %>% 
  group_by(pid, test) %>% 
  mutate(assessments = n()) %>% 
  ungroup() %>% 
  filter(assessments==2) %>% 
  select(-assessments) %>% 
  group_nest(test) %>% 
  mutate(t_tests = map(data, ~t.test(score ~ relevel(as.factor(time), "t3"), # need to relevel this to get T3-T2 diff (not sure why)
                                     data = .x, paired = TRUE, conf.level = 0.999))) %>% 
  pull(t_tests) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

mod_traits_unlist_fu <- mod_traits_sqdiff_fu[[1]] %>% tidy()
for (i in 2:length(mod_traits_sqdiff_fu)) {
  mod_traits_unlist_fu <- bind_rows(mod_traits_unlist_fu, mod_traits_sqdiff_fu[[i]] %>% tidy())
}

kable(mod_traits_unlist_fu %>% mutate(outcome = sort(names(b5_vars))) %>% 
        select(outcome, everything()) %>% arrange(factor(outcome, levels = (names(b5_vars)))), digits = 3) # order by BFI traits
outcome estimate statistic p.value parameter conf.low conf.high method alternative
extraversion -0.096 -1.820 0.069 511 -0.270 0.078 Paired t-test two.sided
agreeableness -0.007 -0.304 0.761 511 -0.084 0.070 Paired t-test two.sided
conscientiousness -0.086 -1.451 0.147 511 -0.283 0.110 Paired t-test two.sided
neuroticism -0.205 -2.573 0.010 511 -0.469 0.059 Paired t-test two.sided
openness 0.030 1.064 0.288 511 -0.063 0.123 Paired t-test two.sided
sociability -0.138 -1.437 0.151 511 -0.454 0.179 Paired t-test two.sided
assertiveness -0.121 -1.553 0.121 511 -0.378 0.137 Paired t-test two.sided
energy -0.001 -0.007 0.995 511 -0.296 0.294 Paired t-test two.sided
compassion 0.003 0.083 0.934 511 -0.124 0.130 Paired t-test two.sided
respectfulness -0.032 -0.937 0.349 511 -0.144 0.080 Paired t-test two.sided
trust 0.005 0.097 0.923 511 -0.174 0.185 Paired t-test two.sided
organization -0.095 -1.083 0.279 511 -0.384 0.194 Paired t-test two.sided
productiveness -0.139 -1.506 0.133 511 -0.446 0.167 Paired t-test two.sided
responsibility -0.057 -0.838 0.403 511 -0.282 0.168 Paired t-test two.sided
anxiety -0.380 -2.893 0.004 511 -0.814 0.055 Paired t-test two.sided
depression -0.130 -1.138 0.256 511 -0.510 0.249 Paired t-test two.sided
volatility -0.163 -1.670 0.095 511 -0.486 0.160 Paired t-test two.sided
curiosity 0.040 0.904 0.366 511 -0.107 0.187 Paired t-test two.sided
aesthetic 0.083 1.791 0.074 511 -0.071 0.238 Paired t-test two.sided
imagination -0.101 -1.670 0.096 511 -0.301 0.099 Paired t-test two.sided
# effect sizes
d_trait_fu <- cohend_cust(paste0(str_trunc(names(b5_vars)[1], 5, ellipsis = ""), "_sqdiff"), 
                       df_sbsa2 %>% filter(rando!="Waitlist-Control" & time %in% c(2,3)))
d_traits_unlist_fu <- as_tibble(d_trait_fu$cohen.d)
for (i in 2:length(names(b5_vars))) {
  d_trait_fu <- cohend_cust(paste0(str_trunc(names(b5_vars)[i], 5, ellipsis = ""), "_sqdiff"), 
                         df_sbsa2 %>% filter(rando!="Waitlist-Control" & time %in% c(2,3)))
  d_traits_unlist_fu <- bind_rows(d_traits_unlist_fu, as_tibble(d_trait_fu$cohen.d))
}
kable(d_traits_unlist_fu %>% mutate(outcome = names(b5_vars)) %>% select(outcome, everything()), digits = 3)
outcome lower effect upper
extraversion -0.259 -0.060 0.140
agreeableness -0.236 -0.037 0.163
conscientiousness -0.259 -0.059 0.140
neuroticism -0.275 -0.075 0.125
openness -0.166 0.033 0.233
sociability -0.244 -0.044 0.155
assertiveness -0.279 -0.080 0.120
energy -0.199 0.000 0.200
compassion -0.229 -0.030 0.170
respectfulness -0.265 -0.066 0.134
trust -0.197 0.002 0.202
organization -0.253 -0.054 0.146
productiveness -0.256 -0.056 0.144
responsibility -0.237 -0.037 0.162
anxiety -0.298 -0.098 0.101
depression -0.235 -0.035 0.164
volatility -0.261 -0.061 0.139
curiosity -0.188 0.012 0.212
aesthetic -0.124 0.076 0.276
imagination -0.267 -0.067 0.132

No significant further changes in the squared difference from the second to the third measurement occasion (at .001). For neuroticism (and anxiety) further decreases only at p < .01.

6.3.2.3 Summary plot

Traits/facets sorted by average size of squared differences - in the intervention groups from T1 to T2

sqdiff_df_plot <- df_sbsa2 %>% 
  filter(rando!="Waitlist-Control" & time %in% c(1,2)) %>% 
  select(pid, time, all_of(paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_sqdiff"))) %>% 
  pivot_longer(-c(pid, time), names_to = "trait", values_to = "sqdiff") %>% 
  group_by(trait) %>% 
  mutate(cur_group_id()) %>% 
  ungroup() %>% 
  filter(!is.na(sqdiff)) %>% 
  mutate(trait2 = fct_recode(trait, !!! setNames(paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_sqdiff"),
                                                 str_to_title(names(b5_vars)))),
         trait2 = fct_reorder(trait2, sqdiff, .desc = T))

plot_sqdiff <- ggplot(sqdiff_df_plot) + 
  aes(x = as.factor(time), y = sqdiff) + 
  geom_boxplot() + 
  geom_violin(fill = NA) +
  ggforce::facet_wrap_paginate(~trait2, ncol=3, nrow=2) +
  labs(x = "Measurement Occasion", y = "Squared difference") + 
  theme_bw()

plot_sqdiff + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 1)

plot_sqdiff + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 2)

plot_sqdiff + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 3)

plot_sqdiff + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 4)

plot_sqdiff + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 5)

For some of the facets, the distribution look very similar and differences over time are perhaps driven by outliers.

Traits/facets sorted by average size of squared differences - in the control group from T1 to T2

sqdiff_df_plot_cg <- df_sbsa2 %>% 
  filter(rando=="Waitlist-Control" & time %in% c(1,2)) %>% 
  select(pid, time, all_of(paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_sqdiff"))) %>% 
  pivot_longer(-c(pid, time), names_to = "trait", values_to = "sqdiff") %>% 
  group_by(trait) %>% 
  mutate(cur_group_id()) %>% 
  ungroup() %>% 
  filter(!is.na(sqdiff)) %>% 
  mutate(trait2 = fct_recode(trait, !!! setNames(paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_sqdiff"),
                                                 str_to_title(names(b5_vars)))),
         trait2 = fct_reorder(trait2, sqdiff, .desc = T))

plot_sqdiff_cg <- ggplot(sqdiff_df_plot_cg) + 
  aes(x = as.factor(time), y = sqdiff) + 
  geom_boxplot() + 
  geom_violin(fill = NA) +
  ggforce::facet_wrap_paginate(~trait2, ncol=3, nrow=2) +
  labs(x = "Measurement Occasion", y = "Squared difference") + 
  theme_bw()

plot_sqdiff_cg + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 1)

plot_sqdiff_cg + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 2)

plot_sqdiff_cg + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 3)

plot_sqdiff_cg + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 4)

plot_sqdiff_cg + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 5)

Smaller changes but also quite substantial for some traits/facets (although not significant).

Traits/facets sorted by average size of squared differences - in the intervention groups from T2 to T3

sqdiff_df_plot_fu <- df_sbsa2 %>% 
  filter(rando!="Waitlist-Control" & time %in% c(2,3)) %>% 
  select(pid, time, all_of(paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_sqdiff"))) %>% 
  pivot_longer(-c(pid, time), names_to = "trait", values_to = "sqdiff") %>% 
  group_by(trait) %>% 
  mutate(cur_group_id()) %>% 
  ungroup() %>% 
  filter(!is.na(sqdiff)) %>% 
  mutate(trait2 = fct_recode(trait, !!! setNames(paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_sqdiff"),
                                                 str_to_title(names(b5_vars)))),
         trait2 = fct_reorder(trait2, sqdiff, .desc = T))

plot_sqdiff_fu <- ggplot(sqdiff_df_plot_fu) + 
  aes(x = as.factor(time), y = sqdiff) + 
  geom_boxplot() + 
  geom_violin(fill = NA) +
  ggforce::facet_wrap_paginate(~trait2, ncol=3, nrow=2) +
  labs(x = "Measurement Occasion", y = "Squared difference") + 
  theme_bw()

plot_sqdiff_fu + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 1)

plot_sqdiff_fu + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 2)

plot_sqdiff_fu + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 3)

plot_sqdiff_fu + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 4)

plot_sqdiff_fu + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 5)

No substantial changes over time.


6.4 H4: Change goals and change in personality (current / ideal) in self-improvement group

Not specifically preregistered for study 2 because we were foremost interested in the moderation hypothesis (H6 in prereg / H2 in paper) and thought that it was somewhat redundant with these models of correlations with the change score. I still ran the models for study 2 here (without the control group and for changes between T1 and T2) in case the comparison with study 1 is of interest.

In the self-improvement group, there will be a correlation between change goals and change in current-personality ratings but not change in ideal-personality ratings.

We will test this one domain/facet at a time. We will use both general continuous change goal score as well as trait-specific change goals. To test this hypothesis, we will estimate the mean-level differences across time for both current and ideal trait ratings using latent change models and correlate change goals with the change variable from those models.

Reshape and split data set by intervention group:

Show the code
# from T1 to T2
df_sbsa2_wide_pers_sb <- df_sbsa2 %>% 
  filter(rando=="Self-Improvement" & time %in% c(1,2)) %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sb07")), # facet-specific change goals
         sb06_01) %>% # general change goal
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with("sb07"), sb06_01)) %>% 
  select(-c(sb07_01_t2, sb07_02_t2, sb07_03_t2, sb07_04_t2, sb07_05_t2, 
            sb07_06_t2, sb07_07_t2, sb07_08_t2, sb07_09_t2, sb07_10_t2, 
            sb07_11_t2, sb07_12_t2, sb07_13_t2, sb07_14_t2, sb07_15_t2, sb06_01_t2))
# standardize goal variables (better interpretation for when they are in SEM as a single manifest variable, not so much a problem when they form a latent scale)
df_sbsa2_wide_pers_sb <- df_sbsa2_wide_pers_sb %>% 
  mutate_at(c(colnames(df_sbsa2_wide_pers_sb)[-1]), ~(scale(.) %>% as.vector)) 
# colnames(df_sbsa2_wide_pers_sb)

group_assign <- df_sbsa2 %>% select(pid, rando) %>% unique()

df_sbsa2_wide_pers_sb <- df_sbsa2_wide_pers %>% left_join(group_assign) %>% 
  filter(rando=="Self-Improvement") %>% select(-rando, -ends_with("_t3")) %>%
  left_join(df_sbsa2_wide_pers_sb)

# follow-up, from T2 to T3 (for later models)
df_sbsa2_wide_pers_sb_fu <- df_sbsa2 %>% 
  filter(rando=="Self-Improvement" & time %in% c(2,3)) %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sb07")), # facet-specific change goals
         sb06_01) %>% # general change goal
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with("sb07"), sb06_01)) %>% 
  select(-c(sb07_01_t2, sb07_02_t2, sb07_03_t2, sb07_04_t2, sb07_05_t2, 
            sb07_06_t2, sb07_07_t2, sb07_08_t2, sb07_09_t2, sb07_10_t2, 
            sb07_11_t2, sb07_12_t2, sb07_13_t2, sb07_14_t2, sb07_15_t2, sb06_01_t2))
# standardize goal variables (better interpretation for when they are in SEM as a single manifest variable, not so much a problem when they form a latent scale)
df_sbsa2_wide_pers_sb_fu <- df_sbsa2_wide_pers_sb_fu %>% 
  mutate_at(c(colnames(df_sbsa2_wide_pers_sb_fu)[-1]), ~(scale(.) %>% as.vector)) 
# colnames(df_sbsa2_wide_pers_sb_fu)

df_sbsa2_wide_pers_sb_fu <- df_sbsa2_wide_pers %>% left_join(group_assign) %>% 
  filter(rando=="Self-Improvement" & !is.na(valid_t2)) %>% select(-rando, -ends_with("_t1")) %>%
  left_join(df_sbsa2_wide_pers_sb_fu)

6.4.1 Big Five traits

6.4.1.1 Extraversion - current-personality: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_curr_hyp4 <- '
extra_t1 =~ 1*extra_curr_par1_t1 + lamb2*extra_curr_par2_t1 + lamb3*extra_curr_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_curr_par1_t2 + lamb2*extra_curr_par2_t2 + lamb3*extra_curr_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
extra_t1 ~~ d_extra_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

extra_curr_par1_t1 ~~ extra_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_curr_par2_t1 ~~ extra_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_curr_par3_t1 ~~ extra_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_curr_par1_t1 ~~ res1*extra_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_curr_par2_t1 ~~ res2*extra_curr_par2_t1   # This allows residual variance on indicator X2 at T1
extra_curr_par3_t1 ~~ res3*extra_curr_par3_t1   # This allows residual variance on indicator X3 at T1

extra_curr_par1_t2 ~~ res1*extra_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_curr_par2_t2 ~~ res2*extra_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_curr_par3_t2 ~~ res3*extra_curr_par3_t2  # This allows residual variance on indicator X3 at T2

extra_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_extra_curr_hyp4 <- lavaan(mi_lcs_extra_curr_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_curr_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 18 4605.81 4674.625 0.938 0.109 0.107
# parameters of interest
params_lcs_extra_curr_hyp4 <- broom::tidy(fit_mi_lcs_extra_curr_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                     "d_extra_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                     "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.097 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.541 NA NA
d_extra_1 ~1 0.093 0.002 0.185 0.321 3.378 0.001
extra_t1 ~1 2.989 2.844 3.133 5.066 68.090 0.000
d_extra_1 ~~ d_extra_1 0.085 0.012 0.157 1.000 3.859 0.000
extra_t1 ~~ d_extra_1 -0.072 -0.136 -0.007 -0.417 -3.651 0.000
d_extra_1 ~~ sb06_01_t1 -0.026 -0.103 0.052 -0.088 -1.090 0.276
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

The correlation of the general change goal with the extraversion change score (current-personality) is not significantly different from zero, r = -0.088, p = 0.276.

6.4.1.2 Extraversion - ideal-personality: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_ideal_hyp4 <- '
extra_t1 =~ 1*extra_ideal_par1_t1 + lamb2*extra_ideal_par2_t1 + lamb3*extra_ideal_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_ideal_par1_t2 + lamb2*extra_ideal_par2_t2 + lamb3*extra_ideal_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
extra_t1 ~~ d_extra_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

extra_ideal_par1_t1 ~~ extra_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_ideal_par2_t1 ~~ extra_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_ideal_par3_t1 ~~ extra_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_ideal_par1_t1 ~~ res1*extra_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_ideal_par2_t1 ~~ res2*extra_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
extra_ideal_par3_t1 ~~ res3*extra_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

extra_ideal_par1_t2 ~~ res1*extra_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_ideal_par2_t2 ~~ res2*extra_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_ideal_par3_t2 ~~ res3*extra_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

extra_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_extra_ideal_hyp4 <- lavaan(mi_lcs_extra_ideal_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_ideal_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 18 4107.397 4176.212 0.993 0.025 0.045
# parameters of interest
params_lcs_extra_ideal_hyp4 <- broom::tidy(fit_mi_lcs_extra_ideal_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.976 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.628 NA NA
d_extra_1 ~1 -0.019 -0.092 0.053 -0.081 -0.877 0.380
extra_t1 ~1 3.682 3.570 3.795 9.893 107.796 0.000
d_extra_1 ~~ d_extra_1 0.057 0.000 0.115 1.000 3.271 0.001
extra_t1 ~~ d_extra_1 -0.025 -0.069 0.018 -0.283 -1.905 0.057
d_extra_1 ~~ sb06_01_t1 0.002 -0.073 0.077 0.009 0.094 0.925
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general change goal with extraversion change score (ideal-personality) is not significantly different from zero, r = 0.009, p = 0.925.

6.4.1.3 Extraversion - current-personality: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_curr_specif_hyp4 <- '
extra_t1 =~ 1*extra_curr_par1_t1 + lamb2*extra_curr_par2_t1 + lamb3*extra_curr_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_curr_par1_t2 + lamb2*extra_curr_par2_t2 + lamb3*extra_curr_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

goals =~ 1*sb07_01_t1 + sb07_02_t1 + sb07_03_t1 # latent change goal variable (three facets per trait)

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
extra_t1 ~~ d_extra_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

extra_curr_par1_t1 ~~ extra_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_curr_par2_t1 ~~ extra_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_curr_par3_t1 ~~ extra_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_curr_par1_t1 ~~ res1*extra_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_curr_par2_t1 ~~ res2*extra_curr_par2_t1   # This allows residual variance on indicator X2 at T1
extra_curr_par3_t1 ~~ res3*extra_curr_par3_t1   # This allows residual variance on indicator X3 at T1

extra_curr_par1_t2 ~~ res1*extra_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_curr_par2_t2 ~~ res2*extra_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_curr_par3_t2 ~~ res3*extra_curr_par3_t2  # This allows residual variance on indicator X3 at T2

extra_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_01_t1 ~~ sb07_01_t1
sb07_02_t1 ~~ sb07_02_t1
sb07_03_t1 ~~ sb07_03_t1

sb07_01_t1 ~ 1
sb07_02_t1 ~ 1
sb07_03_t1 ~ 1
'
fit_mi_lcs_extra_curr_specif_hyp4 <- lavaan(mi_lcs_extra_curr_specif_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_curr_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 25 6479.07 6574.646 0.877 0.124 0.144
# parameters of interest
params_lcs_extra_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_extra_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "goals ~~ d_extra_1", "goals ~~ goals", # change goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.120 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.570 NA NA
d_extra_1 ~1 0.091 0.001 0.182 0.307 3.334 0.001
extra_t1 ~1 2.990 2.845 3.134 5.110 68.086 0.000
d_extra_1 ~~ d_extra_1 0.089 0.014 0.164 1.000 3.884 0.000
extra_t1 ~~ d_extra_1 -0.079 -0.148 -0.010 -0.454 -3.755 0.000
goals ~~ d_extra_1 -0.036 -0.131 0.058 -0.235 -1.264 0.206
goals ~~ goals 0.269 -0.172 0.711 1.000 2.008 0.045

Correlation of specific, facet-level change goals with extraversion change score (current-personality) is not significantly different from zero, r = -0.235, p = 0.206.

6.4.1.4 Extraversion - ideal-personality: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_ideal_specif_hyp4 <- '
extra_t1 =~ 1*extra_ideal_par1_t1 + lamb2*extra_ideal_par2_t1 + lamb3*extra_ideal_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_ideal_par1_t2 + lamb2*extra_ideal_par2_t2 + lamb3*extra_ideal_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

goals =~ 1*sb07_01_t1 + sb07_02_t1 + sb07_03_t1 # latent change goal variable (three facets per trait)

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
extra_t1 ~~ d_extra_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

extra_ideal_par1_t1 ~~ extra_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_ideal_par2_t1 ~~ extra_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_ideal_par3_t1 ~~ extra_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_ideal_par1_t1 ~~ res1*extra_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_ideal_par2_t1 ~~ res2*extra_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
extra_ideal_par3_t1 ~~ res3*extra_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

extra_ideal_par1_t2 ~~ res1*extra_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_ideal_par2_t2 ~~ res2*extra_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_ideal_par3_t2 ~~ res3*extra_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

extra_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_01_t1 ~~ sb07_01_t1
sb07_02_t1 ~~ sb07_02_t1
sb07_03_t1 ~~ sb07_03_t1

sb07_01_t1 ~ 1
sb07_02_t1 ~ 1
sb07_03_t1 ~ 1
'
fit_mi_lcs_extra_ideal_specif_hyp4 <- lavaan(mi_lcs_extra_ideal_specif_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_ideal_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 25 5982.528 6078.104 0.995 0.018 0.034
# parameters of interest
params_lcs_extra_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_extra_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "goals ~~ d_extra_1", "goals ~~ goals", # change goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.977 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.631 NA NA
d_extra_1 ~1 -0.019 -0.092 0.053 -0.080 -0.872 0.383
extra_t1 ~1 3.682 3.570 3.795 9.909 107.814 0.000
d_extra_1 ~~ d_extra_1 0.057 0.000 0.115 1.000 3.301 0.001
extra_t1 ~~ d_extra_1 -0.026 -0.068 0.017 -0.286 -1.952 0.051
goals ~~ d_extra_1 0.012 -0.037 0.062 0.113 0.812 0.417
goals ~~ goals 0.205 -0.141 0.551 1.000 1.953 0.051

Correlation of specific, facet-level change goals with extraversion change score (ideal-personality) is not significantly different from zero, r = 0.113, p = 0.417.

6.4.1.5 Agreeableness - current-personality: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_curr_hyp4 <- '
agree_t1 =~ 1*agree_curr_par1_t1 + lamb2*agree_curr_par2_t1 + lamb3*agree_curr_par3_t1 # This specifies the measurement model for agree_t1
agree_t2 =~ 1*agree_curr_par1_t2 + lamb2*agree_curr_par2_t2 + lamb3*agree_curr_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
agree_t1 ~~ d_agree_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

agree_curr_par1_t1 ~~ agree_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_curr_par2_t1 ~~ agree_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_curr_par3_t1 ~~ agree_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_curr_par1_t1 ~~ res1*agree_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_curr_par2_t1 ~~ res2*agree_curr_par2_t1   # This allows residual variance on indicator X2 at T1
agree_curr_par3_t1 ~~ res3*agree_curr_par3_t1   # This allows residual variance on indicator X3 at T1

agree_curr_par1_t2 ~~ res1*agree_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_curr_par2_t2 ~~ res2*agree_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_curr_par3_t2 ~~ res3*agree_curr_par3_t2  # This allows residual variance on indicator X3 at T2

agree_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_agree_curr_hyp4 <- lavaan(mi_lcs_agree_curr_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_curr_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 18 3940.804 4009.619 0.999 0.011 0.05
# parameters of interest
params_lcs_agree_curr_hyp4 <- broom::tidy(fit_mi_lcs_agree_curr_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                     "d_agree_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                     "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.070 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.530 NA NA
d_agree_1 ~1 0.020 -0.040 0.080 0.097 1.074 0.283
agree_t1 ~1 3.463 3.349 3.577 8.480 99.783 0.000
d_agree_1 ~~ d_agree_1 0.041 -0.002 0.084 1.000 3.121 0.002
agree_t1 ~~ d_agree_1 -0.031 -0.069 0.007 -0.376 -2.678 0.007
d_agree_1 ~~ sb06_01_t1 0.022 -0.031 0.075 0.110 1.383 0.167
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general change goal with agreeableness change score (current-personality) is not significantly different from zero, r = 0.11, p = 0.167.

6.4.1.6 Agreeableness - ideal-personality: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_ideal_hyp4 <- '
agree_t1 =~ 1*agree_ideal_par1_t1 + lamb2*agree_ideal_par2_t1 + lamb3*agree_ideal_par3_t1 # This specifies the measurement model for agree_t1 
agree_t2 =~ 1*agree_ideal_par1_t2 + lamb2*agree_ideal_par2_t2 + lamb3*agree_ideal_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
agree_t1 ~~ d_agree_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

agree_ideal_par1_t1 ~~ agree_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_ideal_par2_t1 ~~ agree_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_ideal_par3_t1 ~~ agree_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_ideal_par1_t1 ~~ res1*agree_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_ideal_par2_t1 ~~ res2*agree_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
agree_ideal_par3_t1 ~~ res3*agree_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

agree_ideal_par1_t2 ~~ res1*agree_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_ideal_par2_t2 ~~ res2*agree_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_ideal_par3_t2 ~~ res3*agree_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

agree_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_agree_ideal_hyp4 <- lavaan(mi_lcs_agree_ideal_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_ideal_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 18 3945.079 4013.894 0.992 0.031 0.029
# parameters of interest
params_lcs_agree_ideal_hyp4 <- broom::tidy(fit_mi_lcs_agree_ideal_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.054 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.646 NA NA
d_agree_1 ~1 -0.030 -0.104 0.043 -0.112 -1.354 0.176
agree_t1 ~1 3.769 3.653 3.886 8.516 106.115 0.000
d_agree_1 ~~ d_agree_1 0.074 0.018 0.129 1.000 4.357 0.000
agree_t1 ~~ d_agree_1 -0.047 -0.089 -0.004 -0.388 -3.640 0.000
d_agree_1 ~~ sb06_01_t1 0.009 -0.056 0.073 0.032 0.438 0.662
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general change goal with agreeableness change score (ideal-personality) is not significantly different from zero, r = 0.032, p = 0.662.

6.4.1.7 Agreeableness - current-personality: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_curr_specif_hyp4 <- '
agree_t1 =~ 1*agree_curr_par1_t1 + lamb2*agree_curr_par2_t1 + lamb3*agree_curr_par3_t1 # This specifies the measurement model for agree_t1
agree_t2 =~ 1*agree_curr_par1_t2 + lamb2*agree_curr_par2_t2 + lamb3*agree_curr_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

goals =~ 1*sb07_04_t1 + sb07_05_t1 + sb07_06_t1 # latent change goal variable (three facets per trait)

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
agree_t1 ~~ d_agree_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

agree_curr_par1_t1 ~~ agree_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_curr_par2_t1 ~~ agree_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_curr_par3_t1 ~~ agree_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_curr_par1_t1 ~~ res1*agree_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_curr_par2_t1 ~~ res2*agree_curr_par2_t1   # This allows residual variance on indicator X2 at T1
agree_curr_par3_t1 ~~ res3*agree_curr_par3_t1   # This allows residual variance on indicator X3 at T1

agree_curr_par1_t2 ~~ res1*agree_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_curr_par2_t2 ~~ res2*agree_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_curr_par3_t2 ~~ res3*agree_curr_par3_t2  # This allows residual variance on indicator X3 at T2

agree_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_04_t1 ~~ sb07_04_t1
sb07_05_t1 ~~ sb07_05_t1
sb07_06_t1 ~~ sb07_06_t1

sb07_04_t1 ~ 1
sb07_05_t1 ~ 1
sb07_06_t1 ~ 1
'
fit_mi_lcs_agree_curr_specif_hyp4 <- lavaan(mi_lcs_agree_curr_specif_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_curr_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 25 5651.088 5746.664 0.976 0.048 0.082
# parameters of interest
params_lcs_agree_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_agree_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "goals ~~ d_agree_1", "goals ~~ goals", # change goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.083 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.549 NA NA
d_agree_1 ~1 0.020 -0.040 0.080 0.099 1.120 0.263
agree_t1 ~1 3.463 3.349 3.577 8.462 99.734 0.000
d_agree_1 ~~ d_agree_1 0.043 -0.001 0.087 1.000 3.217 0.001
agree_t1 ~~ d_agree_1 -0.034 -0.074 0.006 -0.399 -2.795 0.005
goals ~~ d_agree_1 -0.010 -0.056 0.036 -0.072 -0.728 0.467
goals ~~ goals 0.466 0.198 0.734 1.000 5.722 0.000

Correlation of specific, facet-level change goals with agreeableness change score (current-personality) is not significantly different from zero, r = -0.072, p = 0.467.

6.4.1.8 Agreeableness - ideal-personality: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_ideal_specif_hyp4 <- '
agree_t1 =~ 1*agree_ideal_par1_t1 + lamb2*agree_ideal_par2_t1 + lamb3*agree_ideal_par3_t1 # This specifies the measurement model for agree_t1 
agree_t2 =~ 1*agree_ideal_par1_t2 + lamb2*agree_ideal_par2_t2 + lamb3*agree_ideal_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

goals =~ 1*sb07_04_t1 + sb07_05_t1 + sb07_06_t1 # latent change goal variable (three facets per trait)

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
agree_t1 ~~ d_agree_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

agree_ideal_par1_t1 ~~ agree_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_ideal_par2_t1 ~~ agree_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_ideal_par3_t1 ~~ agree_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_ideal_par1_t1 ~~ res1*agree_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_ideal_par2_t1 ~~ res2*agree_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
agree_ideal_par3_t1 ~~ res3*agree_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

agree_ideal_par1_t2 ~~ res1*agree_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_ideal_par2_t2 ~~ res2*agree_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_ideal_par3_t2 ~~ res3*agree_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

agree_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_04_t1 ~~ sb07_04_t1
sb07_05_t1 ~~ sb07_05_t1
sb07_06_t1 ~~ sb07_06_t1

sb07_04_t1 ~ 1
sb07_05_t1 ~ 1
sb07_06_t1 ~ 1
'
fit_mi_lcs_agree_ideal_specif_hyp4 <- lavaan(mi_lcs_agree_ideal_specif_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_ideal_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 25 5654.243 5749.819 0.977 0.048 0.058
# parameters of interest
params_lcs_agree_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_agree_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "goals ~~ d_agree_1", "goals ~~ goals", # change goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.055 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.647 NA NA
d_agree_1 ~1 -0.030 -0.104 0.044 -0.111 -1.347 0.178
agree_t1 ~1 3.769 3.653 3.886 8.518 106.129 0.000
d_agree_1 ~~ d_agree_1 0.074 0.018 0.130 1.000 4.338 0.000
agree_t1 ~~ d_agree_1 -0.047 -0.089 -0.005 -0.389 -3.642 0.000
goals ~~ d_agree_1 -0.003 -0.061 0.056 -0.014 -0.150 0.880
goals ~~ goals 0.469 0.200 0.737 1.000 5.738 0.000

Correlation of specific, facet-level change goals with agreeableness change score (ideal-personality) is not significantly different from zero, r = -0.014, p = 0.88.

6.4.1.9 Conscientiousness - current-personality: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_curr_hyp4 <- '
consc_t1 =~ 1*consc_curr_par1_t1 + lamb2*consc_curr_par2_t1 + lamb3*consc_curr_par3_t1 # This specifies the measurement model for consc_t1 
consc_t2 =~ 1*consc_curr_par1_t2 + lamb2*consc_curr_par2_t2 + lamb3*consc_curr_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

consc_curr_par1_t1 ~~ consc_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_curr_par2_t1 ~~ consc_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_curr_par3_t1 ~~ consc_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_curr_par1_t1 ~~ res1*consc_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_curr_par2_t1 ~~ res2*consc_curr_par2_t1   # This allows residual variance on indicator X2 at T1
consc_curr_par3_t1 ~~ res3*consc_curr_par3_t1   # This allows residual variance on indicator X3 at T1

consc_curr_par1_t2 ~~ res1*consc_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_curr_par2_t2 ~~ res2*consc_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_curr_par3_t2 ~~ res3*consc_curr_par3_t2  # This allows residual variance on indicator X3 at T2

consc_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_consc_curr_hyp4 <- lavaan(mi_lcs_consc_curr_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_curr_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 18 4201.939 4270.754 0.993 0.043 0.059
# parameters of interest
params_lcs_consc_curr_hyp4 <- broom::tidy(fit_mi_lcs_consc_curr_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                     "d_consc_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                     "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 0.991 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.529 NA NA
d_consc_1 ~1 0.103 0.008 0.198 0.251 3.574 0.000
consc_t1 ~1 3.378 3.226 3.531 4.396 72.808 0.000
d_consc_1 ~~ d_consc_1 0.168 0.017 0.318 1.000 3.673 0.000
consc_t1 ~~ d_consc_1 -0.079 -0.179 0.022 -0.250 -2.569 0.010
d_consc_1 ~~ sb06_01_t1 0.022 -0.094 0.138 0.053 0.619 0.536
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general change goal with conscientiousness change score (current-personality) is not significantly different from zero, r = 0.053, p = 0.536.

6.4.1.10 Conscientiousness - ideal-personality: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_ideal_hyp4 <- '
consc_t1 =~ 1*consc_ideal_par1_t1 + lamb2*consc_ideal_par2_t1 + lamb3*consc_ideal_par3_t1 # This specifies the measurement model for consc_t1
consc_t2 =~ 1*consc_ideal_par1_t2 + lamb2*consc_ideal_par2_t2 + lamb3*consc_ideal_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

consc_ideal_par1_t1 ~~ consc_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_ideal_par2_t1 ~~ consc_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_ideal_par3_t1 ~~ consc_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_ideal_par1_t1 ~~ res1*consc_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_ideal_par2_t1 ~~ res2*consc_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
consc_ideal_par3_t1 ~~ res3*consc_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

consc_ideal_par1_t2 ~~ res1*consc_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_ideal_par2_t2 ~~ res2*consc_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_ideal_par3_t2 ~~ res3*consc_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

consc_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_consc_ideal_hyp4 <- lavaan(mi_lcs_consc_ideal_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_ideal_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 18 3564.246 3633.06 0.989 0.038 0.043
# parameters of interest
params_lcs_consc_ideal_hyp4 <- broom::tidy(fit_mi_lcs_consc_ideal_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 0.937 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.625 NA NA
d_consc_1 ~1 0.009 -0.063 0.081 0.034 0.411 0.681
consc_t1 ~1 4.319 4.215 4.424 10.868 135.542 0.000
d_consc_1 ~~ d_consc_1 0.070 0.020 0.120 1.000 4.626 0.000
consc_t1 ~~ d_consc_1 -0.024 -0.069 0.020 -0.229 -1.781 0.075
d_consc_1 ~~ sb06_01_t1 0.011 -0.058 0.080 0.043 0.538 0.590
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general change goal with conscientiousness change score (ideal-personality) is not significantly different from zero, r = 0.043, p = 0.59.

6.4.1.11 Conscientiousness - current-personality: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_curr_specif_hyp4 <- '
consc_t1 =~ 1*consc_curr_par1_t1 + lamb2*consc_curr_par2_t1 + lamb3*consc_curr_par3_t1 # This specifies the measurement model for consc_t1 
consc_t2 =~ 1*consc_curr_par1_t2 + lamb2*consc_curr_par2_t2 + lamb3*consc_curr_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

goals =~ 1*sb07_07_t1 + sb07_08_t1 + sb07_09_t1 # latent change goal variable (three facets per trait)

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

consc_curr_par1_t1 ~~ consc_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_curr_par2_t1 ~~ consc_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_curr_par3_t1 ~~ consc_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_curr_par1_t1 ~~ res1*consc_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_curr_par2_t1 ~~ res2*consc_curr_par2_t1   # This allows residual variance on indicator X2 at T1
consc_curr_par3_t1 ~~ res3*consc_curr_par3_t1   # This allows residual variance on indicator X3 at T1

consc_curr_par1_t2 ~~ res1*consc_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_curr_par2_t2 ~~ res2*consc_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_curr_par3_t2 ~~ res3*consc_curr_par3_t2  # This allows residual variance on indicator X3 at T2

consc_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_07_t1 ~~ sb07_07_t1
sb07_08_t1 ~~ sb07_08_t1
sb07_09_t1 ~~ sb07_09_t1

sb07_07_t1 ~ 1
sb07_08_t1 ~ 1
sb07_09_t1 ~ 1
'
fit_mi_lcs_consc_curr_specif_hyp4 <- lavaan(mi_lcs_consc_curr_specif_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_curr_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 25 5753.613 5849.189 0.918 0.133 0.239
# parameters of interest
params_lcs_consc_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_consc_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "goals ~~ d_consc_1", "goals ~~ goals", # change goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.052 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.596 NA NA
d_consc_1 ~1 0.106 0.011 0.200 0.242 3.664 0.000
consc_t1 ~1 3.378 3.226 3.531 4.392 72.805 0.000
d_consc_1 ~~ d_consc_1 0.190 0.017 0.363 1.000 3.605 0.000
consc_t1 ~~ d_consc_1 -0.123 -0.245 -0.002 -0.368 -3.339 0.001
goals ~~ d_consc_1 -0.073 -0.174 0.028 -0.213 -2.365 0.018
goals ~~ goals 0.608 0.374 0.842 1.000 8.555 0.000

Correlation of specific, facet-level change goals with conscientiousness change score (current-personality) is significantly different from zero, r = -0.213, p = 0.018.

6.4.1.12 Conscientiousness - ideal-personality: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_ideal_specif_hyp4 <- '
consc_t1 =~ 1*consc_ideal_par1_t1 + lamb2*consc_ideal_par2_t1 + lamb3*consc_ideal_par3_t1 # This specifies the measurement model for consc_t1
consc_t2 =~ 1*consc_ideal_par1_t2 + lamb2*consc_ideal_par2_t2 + lamb3*consc_ideal_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

goals =~ 1*sb07_07_t1 + sb07_08_t1 + sb07_09_t1 # latent change goal variable (three facets per trait)

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

consc_ideal_par1_t1 ~~ consc_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_ideal_par2_t1 ~~ consc_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_ideal_par3_t1 ~~ consc_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_ideal_par1_t1 ~~ res1*consc_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_ideal_par2_t1 ~~ res2*consc_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
consc_ideal_par3_t1 ~~ res3*consc_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

consc_ideal_par1_t2 ~~ res1*consc_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_ideal_par2_t2 ~~ res2*consc_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_ideal_par3_t2 ~~ res3*consc_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

consc_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_07_t1 ~~ sb07_07_t1
sb07_08_t1 ~~ sb07_08_t1
sb07_09_t1 ~~ sb07_09_t1

sb07_07_t1 ~ 1
sb07_08_t1 ~ 1
sb07_09_t1 ~ 1
'
fit_mi_lcs_consc_ideal_specif_hyp4 <- lavaan(mi_lcs_consc_ideal_specif_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_ideal_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 25 5119.945 5215.522 0.999 0.008 0.031
# parameters of interest
params_lcs_consc_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_consc_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "goals ~~ d_consc_1", "goals ~~ goals", # change goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 0.934 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.620 NA NA
d_consc_1 ~1 0.009 -0.063 0.081 0.035 0.423 0.672
consc_t1 ~1 4.319 4.214 4.424 10.815 135.500 0.000
d_consc_1 ~~ d_consc_1 0.070 0.020 0.120 1.000 4.622 0.000
consc_t1 ~~ d_consc_1 -0.023 -0.069 0.022 -0.222 -1.717 0.086
goals ~~ d_consc_1 -0.023 -0.085 0.038 -0.113 -1.255 0.209
goals ~~ goals 0.606 0.370 0.842 1.000 8.452 0.000

Correlation of specific, facet-level change goals with conscientiousness change score (ideal-personality) is not significantly different from zero, r = -0.113, p = 0.209.

6.4.1.13 Neuroticism - current-personality: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_curr_hyp4 <- '
neuro_t1 =~ 1*neuro_curr_par1_t1 + lamb2*neuro_curr_par2_t1 + lamb3*neuro_curr_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_curr_par1_t2 + lamb2*neuro_curr_par2_t2 + lamb3*neuro_curr_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

neuro_curr_par1_t1 ~~ neuro_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_curr_par2_t1 ~~ neuro_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_curr_par3_t1 ~~ neuro_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_curr_par1_t1 ~~ res1*neuro_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_curr_par2_t1 ~~ res2*neuro_curr_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_curr_par3_t1 ~~ res3*neuro_curr_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_curr_par1_t2 ~~ res1*neuro_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_curr_par2_t2 ~~ res2*neuro_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_curr_par3_t2 ~~ res3*neuro_curr_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_neuro_curr_hyp4 <- lavaan(mi_lcs_neuro_curr_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_curr_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 18 4438.624 4507.439 0.969 0.094 0.13
# parameters of interest
params_lcs_neuro_curr_hyp4 <- broom::tidy(fit_mi_lcs_neuro_curr_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                     "d_neuro_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                     "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.069 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.586 NA NA
d_neuro_1 ~1 -0.180 -0.285 -0.075 -0.391 -5.623 0.000
neuro_t1 ~1 3.276 3.114 3.437 3.898 66.630 0.000
d_neuro_1 ~~ d_neuro_1 0.212 0.114 0.309 1.000 7.157 0.000
neuro_t1 ~~ d_neuro_1 -0.150 -0.258 -0.042 -0.388 -4.578 0.000
d_neuro_1 ~~ sb06_01_t1 -0.004 -0.118 0.109 -0.009 -0.123 0.902
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general change goal with neuroticism change score (current-personality) is not significantly different from zero, r = -0.009, p = 0.902.

6.4.1.14 Neuroticism - ideal-personality: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_ideal_hyp4 <- '
neuro_t1 =~ 1*neuro_ideal_par1_t1 + lamb2*neuro_ideal_par2_t1 + lamb3*neuro_ideal_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_ideal_par1_t2 + lamb2*neuro_ideal_par2_t2 + lamb3*neuro_ideal_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_ideal_par1_t1 ~~ res1*neuro_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_ideal_par2_t1 ~~ res2*neuro_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_ideal_par3_t1 ~~ res3*neuro_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_ideal_par1_t2 ~~ res1*neuro_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_ideal_par2_t2 ~~ res2*neuro_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_ideal_par3_t2 ~~ res3*neuro_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_neuro_ideal_hyp4 <- lavaan(mi_lcs_neuro_ideal_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_ideal_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 18 3576.873 3645.688 1 0.007 0.039
# parameters of interest
params_lcs_neuro_ideal_hyp4 <- broom::tidy(fit_mi_lcs_neuro_ideal_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.949 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.765 NA NA
d_neuro_1 ~1 0.042 -0.047 0.132 0.115 1.550 0.121
neuro_t1 ~1 1.707 1.608 1.806 3.747 56.782 0.000
d_neuro_1 ~~ d_neuro_1 0.135 0.040 0.229 1.000 4.697 0.000
neuro_t1 ~~ d_neuro_1 -0.056 -0.128 0.016 -0.334 -2.542 0.011
d_neuro_1 ~~ sb06_01_t1 -0.045 -0.134 0.044 -0.122 -1.665 0.096
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general change goal with neuroticism change score (ideal-personality) is not significantly different from zero, r = -0.122, p = 0.096.

6.4.1.15 Neuroticism - current-personality: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_curr_specif_hyp4 <- '
neuro_t1 =~ 1*neuro_curr_par1_t1 + lamb2*neuro_curr_par2_t1 + lamb3*neuro_curr_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_curr_par1_t2 + lamb2*neuro_curr_par2_t2 + lamb3*neuro_curr_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

goals =~ 1*sb07_10_t1 + sb07_11_t1 + sb07_12_t1 # latent change goal variable (three facets per trait)

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

neuro_curr_par1_t1 ~~ neuro_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_curr_par2_t1 ~~ neuro_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_curr_par3_t1 ~~ neuro_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_curr_par1_t1 ~~ res1*neuro_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_curr_par2_t1 ~~ res2*neuro_curr_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_curr_par3_t1 ~~ res3*neuro_curr_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_curr_par1_t2 ~~ res1*neuro_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_curr_par2_t2 ~~ res2*neuro_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_curr_par3_t2 ~~ res3*neuro_curr_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_10_t1 ~~ sb07_10_t1
sb07_11_t1 ~~ sb07_11_t1
sb07_12_t1 ~~ sb07_12_t1

sb07_10_t1 ~ 1
sb07_11_t1 ~ 1
sb07_12_t1 ~ 1
'
fit_mi_lcs_neuro_curr_specif_hyp4 <- lavaan(mi_lcs_neuro_curr_specif_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_curr_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 25 6034.297 6129.873 0.911 0.138 0.242
# parameters of interest
params_lcs_neuro_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_neuro_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "goals ~~ d_neuro_1", "goals ~~ goals", # change goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.152 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.690 NA NA
d_neuro_1 ~1 -0.178 -0.284 -0.073 -0.355 -5.556 0.000
neuro_t1 ~1 3.276 3.114 3.437 3.903 66.640 0.000
d_neuro_1 ~~ d_neuro_1 0.253 0.120 0.386 1.000 6.252 0.000
neuro_t1 ~~ d_neuro_1 -0.213 -0.338 -0.088 -0.505 -5.624 0.000
goals ~~ d_neuro_1 0.089 -0.007 0.186 0.248 3.053 0.002
goals ~~ goals 0.516 0.270 0.762 1.000 6.896 0.000

The correlation of specific, facet-level change goals with neuroticism change score (current-personality) is significantly different from zero, r = 0.248, p = 0.002.

6.4.1.16 Neuroticism - ideal-personality: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_ideal_specif_hyp4 <- '
neuro_t1 =~ 1*neuro_ideal_par1_t1 + lamb2*neuro_ideal_par2_t1 + lamb3*neuro_ideal_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_ideal_par1_t2 + lamb2*neuro_ideal_par2_t2 + lamb3*neuro_ideal_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

goals =~ 1*sb07_10_t1 + sb07_11_t1 + sb07_12_t1 # latent change goal variable (three facets per trait)

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_ideal_par1_t1 ~~ res1*neuro_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_ideal_par2_t1 ~~ res2*neuro_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_ideal_par3_t1 ~~ res3*neuro_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_ideal_par1_t2 ~~ res1*neuro_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_ideal_par2_t2 ~~ res2*neuro_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_ideal_par3_t2 ~~ res3*neuro_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_10_t1 ~~ sb07_10_t1
sb07_11_t1 ~~ sb07_11_t1
sb07_12_t1 ~~ sb07_12_t1

sb07_10_t1 ~ 1
sb07_11_t1 ~ 1
sb07_12_t1 ~ 1
'
fit_mi_lcs_neuro_ideal_specif_hyp4 <- lavaan(mi_lcs_neuro_ideal_specif_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_ideal_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 25 5184.686 5280.262 0.995 0.023 0.048
# parameters of interest
params_lcs_neuro_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_neuro_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "goals ~~ d_neuro_1", "goals ~~ goals", # change goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.939 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.749 NA NA
d_neuro_1 ~1 0.042 -0.048 0.132 0.116 1.546 0.122
neuro_t1 ~1 1.707 1.608 1.806 3.746 56.787 0.000
d_neuro_1 ~~ d_neuro_1 0.132 0.041 0.223 1.000 4.775 0.000
neuro_t1 ~~ d_neuro_1 -0.052 -0.122 0.018 -0.314 -2.442 0.015
goals ~~ d_neuro_1 0.018 -0.052 0.088 0.068 0.847 0.397
goals ~~ goals 0.538 0.293 0.782 1.000 7.233 0.000

Correlation of specific, facet-level change goals with neuroticism change score (ideal-personality) is not significantly different from zero, r = 0.068, p = 0.397.

6.4.1.17 Openness - current-personality: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_curr_hyp4 <- '
openn_t1 =~ 1*openn_curr_par1_t1 + lamb2*openn_curr_par2_t1 + lamb3*openn_curr_par3_t1 # This specifies the measurement model for openn_t1
openn_t2 =~ 1*openn_curr_par1_t2 + lamb2*openn_curr_par2_t2 + lamb3*openn_curr_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

openn_curr_par1_t1 ~~ openn_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_curr_par2_t1 ~~ openn_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_curr_par3_t1 ~~ openn_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_curr_par1_t1 ~~ res1*openn_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_curr_par2_t1 ~~ res2*openn_curr_par2_t1   # This allows residual variance on indicator X2 at T1
openn_curr_par3_t1 ~~ res3*openn_curr_par3_t1   # This allows residual variance on indicator X3 at T1

openn_curr_par1_t2 ~~ res1*openn_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_curr_par2_t2 ~~ res2*openn_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_curr_par3_t2 ~~ res3*openn_curr_par3_t2  # This allows residual variance on indicator X3 at T2

openn_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_openn_curr_hyp4 <- lavaan(mi_lcs_openn_curr_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_openn_curr_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 18 4155.418 4224.233 0.991 0.04 0.039
# parameters of interest
params_lcs_openn_curr_hyp4 <- broom::tidy(fit_mi_lcs_openn_curr_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                     "d_openn_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                     "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.999 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.457 NA NA
d_openn_1 ~1 0.078 -0.002 0.158 0.293 3.200 0.001
openn_t1 ~1 3.485 3.359 3.612 6.002 90.551 0.000
d_openn_1 ~~ d_openn_1 0.071 0.015 0.127 1.000 4.159 0.000
openn_t1 ~~ d_openn_1 -0.035 -0.091 0.022 -0.226 -2.028 0.043
d_openn_1 ~~ sb06_01_t1 -0.016 -0.090 0.059 -0.059 -0.692 0.489
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general change goal with openness change score (current-personality) is not significantly different from zero, r = -0.059, p = 0.489.

6.4.1.18 Openness - ideal-personality: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_ideal_hyp4 <- '
openn_t1 =~ 1*openn_ideal_par1_t1 + lamb2*openn_ideal_par2_t1 + lamb3*openn_ideal_par3_t1 # This specifies the measurement model for openn_t1 
openn_t2 =~ 1*openn_ideal_par1_t2 + lamb2*openn_ideal_par2_t2 + lamb3*openn_ideal_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

openn_ideal_par1_t1 ~~ openn_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_ideal_par2_t1 ~~ openn_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_ideal_par3_t1 ~~ openn_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_ideal_par1_t1 ~~ res1*openn_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_ideal_par2_t1 ~~ res2*openn_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
openn_ideal_par3_t1 ~~ res3*openn_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

openn_ideal_par1_t2 ~~ res1*openn_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_ideal_par2_t2 ~~ res2*openn_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_ideal_par3_t2 ~~ res3*openn_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

openn_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_openn_ideal_hyp4 <- lavaan(mi_lcs_openn_ideal_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_openn_ideal_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 18 4014.73 4083.545 0.985 0.042 0.039
# parameters of interest
params_lcs_openn_ideal_hyp4 <- broom::tidy(fit_mi_lcs_openn_ideal_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.027 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.517 NA NA
d_openn_1 ~1 0.016 -0.031 0.063 0.108 1.118 0.264
openn_t1 ~1 3.917 3.814 4.021 13.318 125.051 0.000
d_openn_1 ~~ d_openn_1 0.022 -0.003 0.047 1.000 2.874 0.004
openn_t1 ~~ d_openn_1 -0.013 -0.036 0.010 -0.303 -1.907 0.056
d_openn_1 ~~ sb06_01_t1 0.002 -0.039 0.044 0.017 0.197 0.844
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general change goal with openness change score (ideal-personality) is not significantly different from zero, r = 0.017, p = 0.844.

6.4.1.19 Openness - current-personality: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_curr_specif_hyp4 <- '
openn_t1 =~ 1*openn_curr_par1_t1 + lamb2*openn_curr_par2_t1 + lamb3*openn_curr_par3_t1 # This specifies the measurement model for openn_t1
openn_t2 =~ 1*openn_curr_par1_t2 + lamb2*openn_curr_par2_t2 + lamb3*openn_curr_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

goals =~ 1*sb07_13_t1 + sb07_14_t1 + sb07_15_t1 # latent change goal variable (three facets per trait)

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

openn_curr_par1_t1 ~~ openn_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_curr_par2_t1 ~~ openn_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_curr_par3_t1 ~~ openn_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_curr_par1_t1 ~~ res1*openn_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_curr_par2_t1 ~~ res2*openn_curr_par2_t1   # This allows residual variance on indicator X2 at T1
openn_curr_par3_t1 ~~ res3*openn_curr_par3_t1   # This allows residual variance on indicator X3 at T1

openn_curr_par1_t2 ~~ res1*openn_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_curr_par2_t2 ~~ res2*openn_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_curr_par3_t2 ~~ res3*openn_curr_par3_t2  # This allows residual variance on indicator X3 at T2

openn_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_13_t1 ~~ sb07_13_t1
sb07_14_t1 ~~ sb07_14_t1
sb07_15_t1 ~~ sb07_15_t1

sb07_13_t1 ~ 1
sb07_14_t1 ~ 1
sb07_15_t1 ~ 1
'
fit_mi_lcs_openn_curr_specif_hyp4 <- lavaan(mi_lcs_openn_curr_specif_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_openn_curr_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 25 5660.778 5756.354 0.965 0.073 0.116
# parameters of interest
params_lcs_openn_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_openn_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "goals ~~ d_openn_1", "goals ~~ goals", # change goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.009 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.468 NA NA
d_openn_1 ~1 0.078 -0.001 0.158 0.291 3.237 0.001
openn_t1 ~1 3.485 3.359 3.612 6.009 90.613 0.000
d_openn_1 ~~ d_openn_1 0.072 0.015 0.129 1.000 4.176 0.000
openn_t1 ~~ d_openn_1 -0.039 -0.099 0.020 -0.252 -2.176 0.030
goals ~~ d_openn_1 -0.021 -0.071 0.029 -0.130 -1.392 0.164
goals ~~ goals 0.364 0.158 0.571 1.000 5.801 0.000

The correlation of specific, facet-level change goals with openness change score (current-personality) is not significantly different from zero, r = -0.13, p = 0.164.

6.4.1.20 Openness - ideal-personality: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_ideal_specif_hyp4 <- '
openn_t1 =~ 1*openn_ideal_par1_t1 + lamb2*openn_ideal_par2_t1 + lamb3*openn_ideal_par3_t1 # This specifies the measurement model for openn_t1 
openn_t2 =~ 1*openn_ideal_par1_t2 + lamb2*openn_ideal_par2_t2 + lamb3*openn_ideal_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

goals =~ 1*sb07_13_t1 + sb07_14_t1 + sb07_15_t1 # latent change goal variable (three facets per trait)

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

openn_ideal_par1_t1 ~~ openn_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_ideal_par2_t1 ~~ openn_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_ideal_par3_t1 ~~ openn_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_ideal_par1_t1 ~~ res1*openn_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_ideal_par2_t1 ~~ res2*openn_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
openn_ideal_par3_t1 ~~ res3*openn_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

openn_ideal_par1_t2 ~~ res1*openn_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_ideal_par2_t2 ~~ res2*openn_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_ideal_par3_t2 ~~ res3*openn_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

openn_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_13_t1 ~~ sb07_13_t1
sb07_14_t1 ~~ sb07_14_t1
sb07_15_t1 ~~ sb07_15_t1

sb07_13_t1 ~ 1
sb07_14_t1 ~ 1
sb07_15_t1 ~ 1
'
fit_mi_lcs_openn_ideal_specif_hyp4 <- lavaan(mi_lcs_openn_ideal_specif_hyp4, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_openn_ideal_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 25 5521.528 5617.104 0.977 0.051 0.06
# parameters of interest
params_lcs_openn_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_openn_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "goals ~~ d_openn_1", "goals ~~ goals", # change goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.027 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.517 NA NA
d_openn_1 ~1 0.016 -0.031 0.063 0.109 1.132 0.258
openn_t1 ~1 3.917 3.814 4.021 13.331 125.069 0.000
d_openn_1 ~~ d_openn_1 0.022 -0.003 0.047 1.000 2.884 0.004
openn_t1 ~~ d_openn_1 -0.013 -0.036 0.009 -0.303 -1.912 0.056
goals ~~ d_openn_1 -0.002 -0.030 0.027 -0.017 -0.177 0.860
goals ~~ goals 0.365 0.158 0.571 1.000 5.810 0.000

Correlation of specific, facet-level change goals with openness change score (ideal-personality) is not significantly different from zero, r = -0.017, p = 0.86.

6.4.2 Big Five facets

Run models for all facets with a template & loop:

Show the code
# create template:
facet_template <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1       # This estimates the variance of facet_t1 
facet_t1 ~~ d_facet_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_facet_1 ~~ ind_goal     # estimates the covariance/correlation with change goal variable

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ind_goal ~~ ind_goal
ind_goal ~ 1
'

# loop across 15 facets
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # loop across 2 BFI versions (combined pre&post current/ideal)
  for (j in 5:length(bfi_versions)) {
    items = paste0(bfi_versions[[j]], item_nrs)
    # loop across 2 different goal operationalizations (sb06_01_t1 & sb07_XX_t1)
    for (k in 1:2) {
      if (k==1) {
        goal_op = "sb06_01_t1"
      } else{
        goal_op = paste0("sb07_", str_pad(i-5, 2, pad = "0"), "_t1")
      }
      template_filled <- str_replace_all(facet_template, 
                                         c("facet" = short_name,
                                           "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                           "ind_goal" = goal_op))
      facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
      # save to environment
      if (k==1) {
        eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_hyp4")), template_filled))
        eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_hyp4")), facet_model_fit))
      } else{
        eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_specif_hyp4")), template_filled))
        eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_specif_hyp4")), facet_model_fit))
      }
    }
  }
}  
6.4.2.1 Sociability - current-personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7948.7 8032.807 0.912 0.1 0.094
# parameters of interest
params_lcs_socia_curr_hyp4 <- broom::tidy(fit_mi_lcs_socia_curr_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.091 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.515 NA NA
d_socia_1 ~1 0.074 -0.048 0.195 0.191 1.998 0.046
socia_t1 ~1 2.875 2.660 3.090 3.514 44.013 0.000
d_socia_1 ~~ d_socia_1 0.149 0.027 0.272 1.000 4.017 0.000
socia_t1 ~~ d_socia_1 -0.128 -0.242 -0.014 -0.405 -3.705 0.000
d_socia_1 ~~ sb06_01_t1 -0.025 -0.129 0.079 -0.065 -0.796 0.426
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

The correlation of the general change goal with the sociability change score (current-personality) is significantly different from zero, r = -0.065, p = 0.426.

6.4.2.2 Sociability - ideal-personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7781.319 7865.426 0.935 0.053 0.056
# parameters of interest
params_lcs_socia_ideal_hyp4 <- broom::tidy(fit_mi_lcs_socia_ideal_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 0.993 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.650 NA NA
d_socia_1 ~1 -0.033 -0.125 0.060 -0.120 -1.155 0.248
socia_t1 ~1 4.241 4.102 4.380 10.208 100.432 0.000
d_socia_1 ~~ d_socia_1 0.074 -0.026 0.174 1.000 2.426 0.015
socia_t1 ~~ d_socia_1 -0.036 -0.094 0.022 -0.317 -2.028 0.043
d_socia_1 ~~ sb06_01_t1 0.042 -0.048 0.131 0.153 1.531 0.126
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general change goal with sociability change score (ideal-personality) is not significantly different from zero, r = 0.153, p = 0.126.

6.4.2.3 Sociability - current-personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7943.529 8027.636 0.885 0.117 0.13
# parameters of interest
params_lcs_socia_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_socia_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~~ sb07_01_t1", "sb07_01_t1 ~~ sb07_01_t1", # change goals
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.127 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.561 NA NA
d_socia_1 ~1 0.075 -0.047 0.196 0.184 2.025 0.043
socia_t1 ~1 2.876 2.661 3.091 3.526 44.021 0.000
d_socia_1 ~~ d_socia_1 0.165 0.025 0.304 1.000 3.887 0.000
socia_t1 ~~ d_socia_1 -0.153 -0.281 -0.025 -0.462 -3.944 0.000
d_socia_1 ~~ sb07_01_t1 -0.082 -0.210 0.045 -0.203 -2.128 0.033
sb07_01_t1 ~~ sb07_01_t1 0.997 0.791 1.203 1.000 15.899 0.000

Correlation of specific, facet-level change goals with sociability change score (current-personality) is significantly different from zero, r = -0.203, p = 0.033.

6.4.2.4 Sociability - ideal-personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7782.407 7866.514 0.947 0.047 0.056
# parameters of interest
params_lcs_socia_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_socia_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~~ sb07_01_t1", "sb07_01_t1 ~~ sb07_01_t1", # change goals
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 0.975 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.613 NA NA
d_socia_1 ~1 -0.031 -0.124 0.063 -0.115 -1.071 0.284
socia_t1 ~1 4.241 4.102 4.380 10.068 100.472 0.000
d_socia_1 ~~ d_socia_1 0.070 -0.028 0.168 1.000 2.360 0.018
socia_t1 ~~ d_socia_1 -0.030 -0.087 0.026 -0.273 -1.766 0.077
d_socia_1 ~~ sb07_01_t1 -0.033 -0.123 0.056 -0.126 -1.224 0.221
sb07_01_t1 ~~ sb07_01_t1 0.997 0.791 1.203 1.000 15.899 0.000

The correlation of specific, facet-level change goals with the anxiety change score (ideal-personality) is not significantly different from zero, r = -0.126, p = 0.221.

6.4.2.5 Assertiveness - current-personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8168.656 8252.763 0.959 0.061 0.064
# parameters of interest
params_lcs_asser_curr_hyp4 <- broom::tidy(fit_mi_lcs_asser_curr_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.035 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.492 NA NA
d_asser_1 ~1 0.060 -0.022 0.143 0.220 2.416 0.016
asser_t1 ~1 3.093 2.891 3.295 5.362 50.389 0.000
d_asser_1 ~~ d_asser_1 0.075 -0.027 0.177 1.000 2.425 0.015
asser_t1 ~~ d_asser_1 -0.049 -0.121 0.024 -0.307 -2.201 0.028
d_asser_1 ~~ sb06_01_t1 -0.019 -0.093 0.055 -0.069 -0.848 0.397
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general change goal with assertiveness change score (current-personality) is not significantly different from zero, r = -0.069, p = 0.397.

6.4.2.6 Assertiveness - ideal-personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7866.05 7950.157 0.947 0.047 0.048
# parameters of interest
params_lcs_asser_ideal_hyp4 <- broom::tidy(fit_mi_lcs_asser_ideal_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.971 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.623 NA NA
d_asser_1 ~1 -0.005 -0.071 0.062 -0.024 -0.237 0.813
asser_t1 ~1 4.145 4.009 4.281 13.421 100.252 0.000
d_asser_1 ~~ d_asser_1 0.039 -0.041 0.120 1.000 1.604 0.109
asser_t1 ~~ d_asser_1 -0.017 -0.058 0.024 -0.274 -1.341 0.180
d_asser_1 ~~ sb06_01_t1 -0.013 -0.083 0.056 -0.067 -0.629 0.530
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general change goal with assertiveness change score (ideal-personality) is not significantly different from zero, r = -0.067, p = 0.53.

6.4.2.7 Assertiveness - current-personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8164.116 8248.223 0.925 0.084 0.088
# parameters of interest
params_lcs_asser_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_asser_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~~ sb07_02_t1", "sb07_02_t1 ~~ sb07_02_t1", # change goals
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.046 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.502 NA NA
d_asser_1 ~1 0.060 -0.022 0.142 0.216 2.394 0.017
asser_t1 ~1 3.093 2.891 3.295 5.363 50.407 0.000
d_asser_1 ~~ d_asser_1 0.077 -0.027 0.181 1.000 2.431 0.015
asser_t1 ~~ d_asser_1 -0.053 -0.129 0.023 -0.330 -2.285 0.022
d_asser_1 ~~ sb07_02_t1 -0.052 -0.133 0.028 -0.189 -2.134 0.033
sb07_02_t1 ~~ sb07_02_t1 0.997 0.806 1.188 1.000 17.182 0.000

Correlation of specific, facet-level change goals with assertiveness change score (current-personality) is significantly different from zero, r = -0.189, p = 0.033.

6.4.2.8 Assertiveness - ideal-personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7866.416 7950.524 0.948 0.046 0.048
# parameters of interest
params_lcs_asser_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_asser_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~~ sb07_02_t1", "sb07_02_t1 ~~ sb07_02_t1", # change goals
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.975 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.630 NA NA
d_asser_1 ~1 -0.005 -0.070 0.061 -0.024 -0.241 0.810
asser_t1 ~1 4.145 4.009 4.281 13.610 100.283 0.000
d_asser_1 ~~ d_asser_1 0.039 -0.041 0.118 1.000 1.604 0.109
asser_t1 ~~ d_asser_1 -0.017 -0.058 0.024 -0.282 -1.350 0.177
d_asser_1 ~~ sb07_02_t1 0.008 -0.055 0.070 0.039 0.405 0.686
sb07_02_t1 ~~ sb07_02_t1 0.997 0.806 1.188 1.000 17.182 0.000

Correlation of specific, facet-level change goals with assertiveness change score (ideal-personality) is not significantly different from zero, r = 0.039, p = 0.686.

6.4.2.9 Energy - current-personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8345.288 8429.395 0.958 0.055 0.071
# parameters of interest
params_lcs_energ_curr_hyp4 <- broom::tidy(fit_mi_lcs_energ_curr_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.087 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.502 NA NA
d_energ_1 ~1 0.056 -0.011 0.122 0.361 2.761 0.006
energ_t1 ~1 3.230 3.049 3.411 9.695 58.588 0.000
d_energ_1 ~~ d_energ_1 0.024 -0.019 0.067 1.000 1.816 0.069
energ_t1 ~~ d_energ_1 -0.020 -0.055 0.014 -0.398 -1.944 0.052
d_energ_1 ~~ sb06_01_t1 -0.016 -0.069 0.038 -0.103 -0.976 0.329
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general change goal with energy change score (current-personality) is not significantly different from zero, r = -0.103, p = 0.329.

6.4.2.10 Energy - ideal-personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7741.959 7826.066 0.93 0.045 0.05
# parameters of interest
params_lcs_energ_ideal_hyp4 <- broom::tidy(fit_mi_lcs_energ_ideal_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 0.804 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.565 NA NA
d_energ_1 ~1 -0.039 -0.102 0.024 -0.319 -2.034 0.042
energ_t1 ~1 3.758 3.560 3.955 21.511 62.558 0.000
d_energ_1 ~~ d_energ_1 0.015 -0.022 0.052 1.000 1.347 0.178
energ_t1 ~~ d_energ_1 0.001 -0.015 0.017 0.037 0.163 0.870
d_energ_1 ~~ sb06_01_t1 0.000 -0.051 0.050 -0.001 -0.008 0.993
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general change goal with energy change score (ideal-personality) is not significantly different from zero, r = -0.001, p = 0.993.

6.4.2.11 Energy - current-personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8346.658 8430.765 0.89 0.091 0.104
# parameters of interest
params_lcs_energ_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_energ_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~~ sb07_03_t1", "sb07_03_t1 ~~ sb07_03_t1", # change goals
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.076 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.485 NA NA
d_energ_1 ~1 0.055 -0.011 0.122 0.368 2.736 0.006
energ_t1 ~1 3.230 3.048 3.411 9.663 58.566 0.000
d_energ_1 ~~ d_energ_1 0.023 -0.019 0.064 1.000 1.797 0.072
energ_t1 ~~ d_energ_1 -0.019 -0.052 0.014 -0.376 -1.879 0.060
d_energ_1 ~~ sb07_03_t1 0.001 -0.046 0.048 0.007 0.074 0.941
sb07_03_t1 ~~ sb07_03_t1 0.997 0.786 1.208 1.000 15.550 0.000

Correlation of specific, facet-level change goals with energy change score (current-personality) is not significantly different from zero, r = 0.007, p = 0.941.

6.4.2.12 Energy - ideal-personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7741.935 7826.042 0.939 0.042 0.05
# parameters of interest
params_lcs_energ_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_energ_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~~ sb07_03_t1", "sb07_03_t1 ~~ sb07_03_t1", # change goals
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 0.804 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.564 NA NA
d_energ_1 ~1 -0.039 -0.102 0.024 -0.320 -2.043 0.041
energ_t1 ~1 3.758 3.560 3.955 21.503 62.551 0.000
d_energ_1 ~~ d_energ_1 0.015 -0.022 0.052 1.000 1.346 0.178
energ_t1 ~~ d_energ_1 0.001 -0.015 0.017 0.040 0.173 0.862
d_energ_1 ~~ sb07_03_t1 -0.002 -0.046 0.041 -0.016 -0.153 0.879
sb07_03_t1 ~~ sb07_03_t1 0.997 0.786 1.208 1.000 15.550 0.000

Correlation of specific, facet-level change goals with energy change score (ideal-personality) is not significantly different from zero, r = -0.016, p = 0.879.

6.4.2.13 Compassion - current-personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8071.261 8155.368 0.965 0.044 0.049
# parameters of interest
params_lcs_compa_curr_hyp4 <- broom::tidy(fit_mi_lcs_compa_curr_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.127 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.455 NA NA
d_compa_1 ~1 0.100 -0.003 0.204 0.412 3.182 0.001
compa_t1 ~1 4.184 4.027 4.340 6.940 87.951 0.000
d_compa_1 ~~ d_compa_1 0.059 -0.031 0.149 1.000 2.163 0.031
compa_t1 ~~ d_compa_1 -0.068 -0.149 0.012 -0.465 -2.797 0.005
d_compa_1 ~~ sb06_01_t1 0.026 -0.059 0.112 0.109 1.014 0.311
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general change goal with compassion change score (current-personality) is not significantly different from zero, r = 0.109, p = 0.311.

6.4.2.14 Compassion - ideal-personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8190.032 8274.139 0.983 0.024 0.048
# parameters of interest
params_lcs_compa_ideal_hyp4 <- broom::tidy(fit_mi_lcs_compa_ideal_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 0.979 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.427 NA NA
d_compa_1 ~1 -0.040 -0.160 0.079 -0.180 -1.109 0.267
compa_t1 ~1 4.225 4.068 4.382 8.252 88.493 0.000
d_compa_1 ~~ d_compa_1 0.050 -0.087 0.187 1.000 1.203 0.229
compa_t1 ~~ d_compa_1 -0.019 -0.123 0.085 -0.168 -0.606 0.544
d_compa_1 ~~ sb06_01_t1 -0.029 -0.124 0.066 -0.131 -1.012 0.312
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general change goal with compassion change score (ideal-personality) is not significantly different from zero, r = -0.131, p = 0.312.

6.4.2.15 Compassion - current-personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8072.163 8156.27 0.925 0.067 0.079
# parameters of interest
params_lcs_compa_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_compa_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~~ sb07_04_t1", "sb07_04_t1 ~~ sb07_04_t1", # change goals
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.136 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.468 NA NA
d_compa_1 ~1 0.099 -0.004 0.202 0.403 3.164 0.002
compa_t1 ~1 4.184 4.028 4.341 7.011 88.158 0.000
d_compa_1 ~~ d_compa_1 0.061 -0.027 0.148 1.000 2.267 0.023
compa_t1 ~~ d_compa_1 -0.070 -0.149 0.009 -0.479 -2.928 0.003
d_compa_1 ~~ sb07_04_t1 -0.008 -0.102 0.087 -0.031 -0.264 0.792
sb07_04_t1 ~~ sb07_04_t1 0.997 0.833 1.161 1.000 19.987 0.000

Correlation of specific, facet-level change goals with compassion change score (current-personality) is not significantly different from zero, r = -0.031, p = 0.792.

6.4.2.16 Compassion - ideal-personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8190.757 8274.864 0.914 0.055 0.067
# parameters of interest
params_lcs_compa_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_compa_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~~ sb07_04_t1", "sb07_04_t1 ~~ sb07_04_t1", # change goals
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 0.976 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.423 NA NA
d_compa_1 ~1 -0.041 -0.161 0.079 -0.185 -1.134 0.257
compa_t1 ~1 4.225 4.068 4.383 8.211 88.429 0.000
d_compa_1 ~~ d_compa_1 0.050 -0.088 0.188 1.000 1.188 0.235
compa_t1 ~~ d_compa_1 -0.018 -0.123 0.086 -0.160 -0.578 0.563
d_compa_1 ~~ sb07_04_t1 0.013 -0.096 0.123 0.060 0.403 0.687
sb07_04_t1 ~~ sb07_04_t1 0.997 0.833 1.161 1.000 19.987 0.000

Correlation of specific, facet-level change goals with compassion change score (ideal-personality) is not significantly different from zero, r = 0.06, p = 0.687.

6.4.2.17 Respectfulness - current-personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 6996.045 7080.152 0.949 0.063 0.066
# parameters of interest
params_lcs_respe_curr_hyp4 <- broom::tidy(fit_mi_lcs_respe_curr_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.165 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.638 NA NA
d_respe_1 ~1 0.017 -0.077 0.112 0.056 0.601 0.548
respe_t1 ~1 4.474 4.343 4.606 7.919 111.900 0.000
d_respe_1 ~~ d_respe_1 0.096 -0.011 0.203 1.000 2.938 0.003
respe_t1 ~~ d_respe_1 -0.090 -0.199 0.019 -0.514 -2.718 0.007
d_respe_1 ~~ sb06_01_t1 0.000 -0.085 0.085 0.001 0.013 0.990
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general change goal with respectfulness change score (current-personality) is not significantly different from zero, r = 0.001, p = 0.99.

6.4.2.18 Respectfulness - ideal-personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 6603.885 6687.992 0.964 0.042 0.046
# parameters of interest
params_lcs_respe_ideal_hyp4 <- broom::tidy(fit_mi_lcs_respe_ideal_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.105 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.674 NA NA
d_respe_1 ~1 -0.001 -0.085 0.082 -0.005 -0.051 0.960
respe_t1 ~1 4.710 4.609 4.811 12.020 153.576 0.000
d_respe_1 ~~ d_respe_1 0.057 -0.007 0.122 1.000 2.911 0.004
respe_t1 ~~ d_respe_1 -0.042 -0.101 0.016 -0.454 -2.401 0.016
d_respe_1 ~~ sb06_01_t1 0.008 -0.068 0.085 0.036 0.367 0.714
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general change goal with respectfulness change score (ideal-personality) is not significantly different from zero, r = 0.036, p = 0.714.

6.4.2.19 Respectfulness - current-personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 6992.447 7076.554 0.905 0.088 0.102
# parameters of interest
params_lcs_respe_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_respe_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~~ sb07_05_t1", "sb07_05_t1 ~~ sb07_05_t1", # change goals
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.198 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.684 NA NA
d_respe_1 ~1 0.020 -0.075 0.114 0.061 0.688 0.491
respe_t1 ~1 4.474 4.342 4.606 7.905 111.873 0.000
d_respe_1 ~~ d_respe_1 0.104 -0.009 0.218 1.000 3.016 0.003
respe_t1 ~~ d_respe_1 -0.101 -0.215 0.013 -0.551 -2.909 0.004
d_respe_1 ~~ sb07_05_t1 -0.049 -0.132 0.035 -0.150 -1.915 0.056
sb07_05_t1 ~~ sb07_05_t1 0.997 0.796 1.198 1.000 16.296 0.000

Correlation of specific, facet-level change goals with respectfulness change score (current-personality) is not significantly different from zero, r = -0.15, p = 0.056.

6.4.2.20 Respectfulness - ideal-personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 6601.026 6685.133 0.961 0.044 0.052
# parameters of interest
params_lcs_respe_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_respe_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~~ sb07_05_t1", "sb07_05_t1 ~~ sb07_05_t1", # change goals
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.116 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.695 NA NA
d_respe_1 ~1 0.000 -0.082 0.083 0.001 0.012 0.991
respe_t1 ~1 4.710 4.609 4.811 12.065 153.595 0.000
d_respe_1 ~~ d_respe_1 0.059 -0.006 0.124 1.000 2.993 0.003
respe_t1 ~~ d_respe_1 -0.045 -0.103 0.014 -0.469 -2.506 0.012
d_respe_1 ~~ sb07_05_t1 -0.037 -0.112 0.039 -0.151 -1.591 0.112
sb07_05_t1 ~~ sb07_05_t1 0.997 0.796 1.198 1.000 16.296 0.000

The correlation of specific, facet-level change goals with the respectfulness change score (ideal-personality) is not significantly different from zero, r = -0.151, p = 0.112.

6.4.2.21 Trust - current-personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8332.229 8416.336 0.927 0.071 0.078
# parameters of interest
params_lcs_trust_curr_hyp4 <- broom::tidy(fit_mi_lcs_trust_curr_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.065 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.490 NA NA
d_trust_1 ~1 0.095 -0.032 0.223 0.323 2.453 0.014
trust_t1 ~1 3.164 2.956 3.372 4.947 49.985 0.000
d_trust_1 ~~ d_trust_1 0.087 -0.044 0.218 1.000 2.176 0.030
trust_t1 ~~ d_trust_1 -0.067 -0.177 0.042 -0.358 -2.033 0.042
d_trust_1 ~~ sb06_01_t1 0.035 -0.070 0.140 0.118 1.089 0.276
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general change goal with trust change score (current-personality) is not significantly different from zero, r = 0.118, p = 0.276.

6.4.2.22 Trust - ideal-personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8005.868 8089.975 0.958 0.043 0.047
# parameters of interest
params_lcs_trust_ideal_hyp4 <- broom::tidy(fit_mi_lcs_trust_ideal_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 0.897 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.338 NA NA
d_trust_1 ~1 -0.062 -0.137 0.013 -0.471 -2.705 0.007
trust_t1 ~1 4.100 3.944 4.255 11.769 86.694 0.000
d_trust_1 ~~ d_trust_1 0.017 -0.042 0.076 1.000 0.962 0.336
trust_t1 ~~ d_trust_1 0.006 -0.031 0.043 0.133 0.542 0.588
d_trust_1 ~~ sb06_01_t1 0.006 -0.069 0.080 0.045 0.260 0.795
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general change goal with trust change score (ideal-personality) is not significantly different from zero, r = 0.045, p = 0.795.

6.4.2.23 Trust - current-personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8332.905 8417.012 0.941 0.063 0.065
# parameters of interest
params_lcs_trust_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_trust_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~~ sb07_06_t1", "sb07_06_t1 ~~ sb07_06_t1", # change goals
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.069 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.500 NA NA
d_trust_1 ~1 0.096 -0.030 0.223 0.320 2.499 0.012
trust_t1 ~1 3.164 2.955 3.372 4.928 49.963 0.000
d_trust_1 ~~ d_trust_1 0.090 -0.041 0.221 1.000 2.264 0.024
trust_t1 ~~ d_trust_1 -0.071 -0.179 0.037 -0.368 -2.166 0.030
d_trust_1 ~~ sb07_06_t1 0.025 -0.085 0.134 0.082 0.739 0.460
sb07_06_t1 ~~ sb07_06_t1 0.997 0.840 1.154 1.000 20.861 0.000

Correlation of specific, facet-level change goals with trust change score (current-personality) is not significantly different from zero, r = 0.082, p = 0.46.

6.4.2.24 Trust - ideal-personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8004.657 8088.764 0.959 0.043 0.047
# parameters of interest
params_lcs_trust_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_trust_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~~ sb07_06_t1", "sb07_06_t1 ~~ sb07_06_t1", # change goals
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 0.897 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.336 NA NA
d_trust_1 ~1 -0.062 -0.138 0.013 -0.478 -2.733 0.006
trust_t1 ~1 4.100 3.944 4.255 11.767 86.724 0.000
d_trust_1 ~~ d_trust_1 0.017 -0.042 0.076 1.000 0.958 0.338
trust_t1 ~~ d_trust_1 0.006 -0.031 0.043 0.138 0.560 0.575
d_trust_1 ~~ sb07_06_t1 0.024 -0.053 0.101 0.182 1.019 0.308
sb07_06_t1 ~~ sb07_06_t1 0.997 0.840 1.154 1.000 20.861 0.000

Correlation of specific, facet-level change goals with trust change score (ideal-personality) is not significantly different from zero, r = 0.182, p = 0.308.

6.4.2.25 Organization - current-personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7860.379 7944.486 0.981 0.047 0.037
# parameters of interest
params_lcs_organ_curr_hyp4 <- broom::tidy(fit_mi_lcs_organ_curr_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.014 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.453 NA NA
d_organ_1 ~1 0.088 -0.050 0.226 0.192 2.101 0.036
organ_t1 ~1 3.144 2.896 3.391 3.051 41.786 0.000
d_organ_1 ~~ d_organ_1 0.212 -0.006 0.430 1.000 3.195 0.001
organ_t1 ~~ d_organ_1 -0.120 -0.285 0.044 -0.254 -2.409 0.016
d_organ_1 ~~ sb06_01_t1 0.007 -0.130 0.143 0.015 0.163 0.871
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general change goal with organization change score (current-personality) is not significantly different from zero, r = 0.015, p = 0.871.

6.4.2.26 Organization - ideal-personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7050.268 7134.375 0.797 0.077 0.089
# parameters of interest
params_lcs_organ_ideal_hyp4 <- broom::tidy(fit_mi_lcs_organ_ideal_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 0.980 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.709 NA NA
d_organ_1 ~1 0.021 -0.088 0.130 0.075 0.641 0.521
organ_t1 ~1 4.321 4.147 4.495 11.022 81.751 0.000
d_organ_1 ~~ d_organ_1 0.080 -0.030 0.191 1.000 2.391 0.017
organ_t1 ~~ d_organ_1 -0.037 -0.121 0.046 -0.333 -1.461 0.144
d_organ_1 ~~ sb06_01_t1 -0.004 -0.092 0.083 -0.016 -0.165 0.869
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general change goal with organization change score (ideal-personality) is not significantly different from zero, r = -0.016, p = 0.869.

6.4.2.27 Organization - current-personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7856.681 7940.788 0.857 0.137 0.168
# parameters of interest
params_lcs_organ_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_organ_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~~ sb07_07_t1", "sb07_07_t1 ~~ sb07_07_t1", # change goals
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.065 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.513 NA NA
d_organ_1 ~1 0.089 -0.049 0.227 0.180 2.116 0.034
organ_t1 ~1 3.144 2.897 3.392 3.056 41.799 0.000
d_organ_1 ~~ d_organ_1 0.245 -0.003 0.494 1.000 3.253 0.001
organ_t1 ~~ d_organ_1 -0.185 -0.397 0.027 -0.363 -2.872 0.004
d_organ_1 ~~ sb07_07_t1 -0.094 -0.258 0.070 -0.190 -1.890 0.059
sb07_07_t1 ~~ sb07_07_t1 0.997 0.850 1.144 1.000 22.374 0.000

Correlation of specific, facet-level change goals with organization change score (current-personality) is not significantly different from zero, r = -0.19, p = 0.059.

6.4.2.28 Organization - ideal-personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7048.768 7132.875 0.764 0.084 0.092
# parameters of interest
params_lcs_organ_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_organ_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~~ sb07_07_t1", "sb07_07_t1 ~~ sb07_07_t1", # change goals
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 0.979 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.715 NA NA
d_organ_1 ~1 0.020 -0.089 0.128 0.069 0.597 0.551
organ_t1 ~1 4.322 4.148 4.495 11.144 81.914 0.000
d_organ_1 ~~ d_organ_1 0.080 -0.031 0.192 1.000 2.368 0.018
organ_t1 ~~ d_organ_1 -0.037 -0.120 0.046 -0.335 -1.456 0.146
d_organ_1 ~~ sb07_07_t1 -0.033 -0.127 0.062 -0.115 -1.133 0.257
sb07_07_t1 ~~ sb07_07_t1 0.997 0.850 1.144 1.000 22.374 0.000

Correlation of specific, facet-level change goals with organization change score (ideal-personality) is not significantly different from zero, r = -0.115, p = 0.257.

6.4.2.29 Productiveness - current-personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7898.333 7982.44 0.941 0.079 0.07
# parameters of interest
params_lcs_produ_curr_hyp4 <- broom::tidy(fit_mi_lcs_produ_curr_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.021 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.655 NA NA
d_produ_1 ~1 0.163 0.011 0.315 0.271 3.534 0.00
produ_t1 ~1 2.583 2.359 2.807 2.752 37.926 0.00
d_produ_1 ~~ d_produ_1 0.363 0.037 0.688 1.000 3.670 0.00
produ_t1 ~~ d_produ_1 -0.199 -0.383 -0.015 -0.352 -3.557 0.00
d_produ_1 ~~ sb06_01_t1 0.004 -0.169 0.176 0.007 0.075 0.94
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.00
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.00

Correlation of general change goal with productiveness change score (current-personality) is not significantly different from zero, r = 0.007, p = 0.94.

6.4.2.30 Productiveness - ideal-personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 5959.765 6043.872 0.915 0.071 0.064
# parameters of interest
params_lcs_produ_ideal_hyp4 <- broom::tidy(fit_mi_lcs_produ_ideal_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 0.887 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.584 NA NA
d_produ_1 ~1 -0.012 -0.092 0.068 -0.048 -0.494 0.621
produ_t1 ~1 4.404 4.271 4.537 11.467 108.850 0.000
d_produ_1 ~~ d_produ_1 0.064 -0.029 0.157 1.000 2.263 0.024
produ_t1 ~~ d_produ_1 -0.012 -0.065 0.041 -0.123 -0.745 0.456
d_produ_1 ~~ sb06_01_t1 0.021 -0.059 0.100 0.082 0.856 0.392
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general change goal with productiveness change score (ideal-personality) is not significantly different from zero, r = 0.082, p = 0.392.

6.4.2.31 Productiveness - current-personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7889.998 7974.105 0.851 0.132 0.155
# parameters of interest
params_lcs_produ_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_produ_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~~ sb07_08_t1", "sb07_08_t1 ~~ sb07_08_t1", # change goals
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.093 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.763 NA NA
d_produ_1 ~1 0.165 0.014 0.316 0.253 3.595 0.000
produ_t1 ~1 2.583 2.359 2.807 2.773 37.951 0.000
d_produ_1 ~~ d_produ_1 0.422 0.065 0.780 1.000 3.884 0.000
produ_t1 ~~ d_produ_1 -0.282 -0.490 -0.074 -0.466 -4.464 0.000
d_produ_1 ~~ sb07_08_t1 -0.146 -0.325 0.033 -0.224 -2.677 0.007
sb07_08_t1 ~~ sb07_08_t1 0.997 0.778 1.216 1.000 14.992 0.000

Correlation of specific, facet-level change goals with productiveness change score (current-personality) is significantly different from zero, r = -0.224, p = 0.007.

6.4.2.32 Productiveness - ideal-personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 5958.989 6043.096 0.916 0.071 0.063
# parameters of interest
params_lcs_produ_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_produ_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~~ sb07_08_t1", "sb07_08_t1 ~~ sb07_08_t1", # change goals
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 0.880 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.574 NA NA
d_produ_1 ~1 -0.012 -0.091 0.068 -0.047 -0.481 0.631
produ_t1 ~1 4.404 4.271 4.537 11.538 108.914 0.000
d_produ_1 ~~ d_produ_1 0.062 -0.028 0.152 1.000 2.270 0.023
produ_t1 ~~ d_produ_1 -0.010 -0.061 0.042 -0.103 -0.624 0.533
d_produ_1 ~~ sb07_08_t1 -0.029 -0.098 0.039 -0.118 -1.415 0.157
sb07_08_t1 ~~ sb07_08_t1 0.997 0.778 1.216 1.000 14.992 0.000

Correlation of specific, facet-level change goals with productiveness change score (ideal-personality) is not significantly different from zero, r = -0.118, p = 0.157.

6.4.2.33 Responsibility - current-personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8070.936 8155.043 0.903 0.087 0.093
# parameters of interest
params_lcs_respo_curr_hyp4 <- broom::tidy(fit_mi_lcs_respo_curr_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.038 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.545 NA NA
d_respo_1 ~1 0.057 -0.029 0.143 0.221 2.166 0.030
respo_t1 ~1 3.598 3.422 3.774 7.363 67.313 0.000
d_respo_1 ~~ d_respo_1 0.066 -0.026 0.158 1.000 2.357 0.018
respo_t1 ~~ d_respo_1 -0.041 -0.106 0.024 -0.330 -2.097 0.036
d_respo_1 ~~ sb06_01_t1 0.011 -0.070 0.092 0.044 0.457 0.648
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general change goal with responsibility change score (current-personality) is not significantly different from zero, r = 0.044, p = 0.648.

6.4.2.34 Responsibility - ideal-personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7570.76 7654.867 0.922 0.06 0.054
# parameters of interest
params_lcs_respo_ideal_hyp4 <- broom::tidy(fit_mi_lcs_respo_ideal_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.018 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.668 NA NA
d_respo_1 ~1 -0.007 -0.068 0.054 -0.036 -0.365 0.715
respo_t1 ~1 4.189 4.006 4.371 14.439 75.423 0.000
d_respo_1 ~~ d_respo_1 0.036 -0.023 0.095 1.000 2.016 0.044
respo_t1 ~~ d_respo_1 -0.020 -0.060 0.021 -0.355 -1.584 0.113
d_respo_1 ~~ sb06_01_t1 0.015 -0.047 0.076 0.079 0.800 0.424
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general change goal with responsibility change score (ideal-personality) is not significantly different from zero, r = 0.079, p = 0.424.

6.4.2.35 Responsibility - current-personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8067.882 8151.989 0.859 0.108 0.12
# parameters of interest
params_lcs_respo_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_respo_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~~ sb07_09_t1", "sb07_09_t1 ~~ sb07_09_t1", # change goals
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.075 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.597 NA NA
d_respo_1 ~1 0.058 -0.028 0.144 0.214 2.223 0.026
respo_t1 ~1 3.598 3.423 3.774 7.385 67.334 0.000
d_respo_1 ~~ d_respo_1 0.073 -0.024 0.171 1.000 2.468 0.014
respo_t1 ~~ d_respo_1 -0.053 -0.126 0.021 -0.399 -2.351 0.019
d_respo_1 ~~ sb07_09_t1 -0.044 -0.129 0.042 -0.161 -1.683 0.092
sb07_09_t1 ~~ sb07_09_t1 0.997 0.856 1.138 1.000 23.300 0.000

Correlation of specific, facet-level change goals with responsibility change score (current-personality) is not significantly different from zero, r = -0.161, p = 0.092.

6.4.2.36 Responsibility - ideal-personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7571.382 7655.489 0.936 0.054 0.052
# parameters of interest
params_lcs_respo_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_respo_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~~ sb07_09_t1", "sb07_09_t1 ~~ sb07_09_t1", # change goals
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.020 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.665 NA NA
d_respo_1 ~1 -0.006 -0.068 0.056 -0.031 -0.319 0.749
respo_t1 ~1 4.188 4.006 4.371 14.264 75.446 0.000
d_respo_1 ~~ d_respo_1 0.037 -0.023 0.096 1.000 2.030 0.042
respo_t1 ~~ d_respo_1 -0.020 -0.062 0.022 -0.356 -1.574 0.116
d_respo_1 ~~ sb07_09_t1 -0.007 -0.070 0.057 -0.035 -0.346 0.729
sb07_09_t1 ~~ sb07_09_t1 0.997 0.856 1.138 1.000 23.300 0.000

Correlation of specific, facet-level change goals with responsibility change score (ideal-personality) is not significantly different from zero, r = -0.035, p = 0.729.

6.4.2.37 Anxiety - current-personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8139.645 8223.752 0.952 0.062 0.084
# parameters of interest
params_lcs_anxie_curr_hyp4 <- broom::tidy(fit_mi_lcs_anxie_curr_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.023 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.464 NA NA
d_anxie_1 ~1 -0.216 -0.363 -0.069 -0.506 -4.833 0.000
anxie_t1 ~1 3.252 3.026 3.478 3.455 47.291 0.000
d_anxie_1 ~~ d_anxie_1 0.182 -0.007 0.371 1.000 3.176 0.001
anxie_t1 ~~ d_anxie_1 -0.111 -0.298 0.077 -0.275 -1.940 0.052
d_anxie_1 ~~ sb06_01_t1 -0.020 -0.180 0.139 -0.048 -0.419 0.675
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general change goal with anxiety change score (current-personality) is not significantly different from zero, r = -0.048, p = 0.675.

6.4.2.38 Anxiety - ideal-personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7712.349 7796.456 0.958 0.028 0.046
# parameters of interest
params_lcs_anxie_ideal_hyp4 <- broom::tidy(fit_mi_lcs_anxie_ideal_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.898 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.895 NA NA
d_anxie_1 ~1 0.022 -0.057 0.102 0.087 0.922 0.356
anxie_t1 ~1 1.404 1.301 1.507 5.468 44.809 0.000
d_anxie_1 ~~ d_anxie_1 0.065 -0.038 0.169 1.000 2.074 0.038
anxie_t1 ~~ d_anxie_1 -0.025 -0.072 0.022 -0.378 -1.742 0.082
d_anxie_1 ~~ sb06_01_t1 -0.046 -0.125 0.033 -0.180 -1.907 0.056
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general change goal with anxiety change score (ideal-personality) is not significantly different from zero, r = -0.18, p = 0.056.

6.4.2.39 Anxiety - current-personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8139.771 8223.878 0.853 0.115 0.151
# parameters of interest
params_lcs_anxie_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_anxie_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~~ sb07_10_t1", "sb07_10_t1 ~~ sb07_10_t1", # change goals
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.038 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.482 NA NA
d_anxie_1 ~1 -0.216 -0.363 -0.068 -0.494 -4.817 0.000
anxie_t1 ~1 3.252 3.026 3.478 3.458 47.285 0.000
d_anxie_1 ~~ d_anxie_1 0.191 -0.004 0.385 1.000 3.227 0.001
anxie_t1 ~~ d_anxie_1 -0.127 -0.333 0.079 -0.309 -2.032 0.042
d_anxie_1 ~~ sb07_10_t1 0.016 -0.150 0.182 0.037 0.319 0.750
sb07_10_t1 ~~ sb07_10_t1 0.997 0.824 1.170 1.000 18.985 0.000

The correlation of specific, facet-level change goals with the anxiety change score (current-personality) is not significantly different from zero, r = 0.037, p = 0.75.

6.4.2.40 Anxiety - ideal-personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7716.877 7800.984 0.938 0.034 0.051
# parameters of interest
params_lcs_anxie_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_anxie_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~~ sb07_10_t1", "sb07_10_t1 ~~ sb07_10_t1", # change goals
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.892 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.881 NA NA
d_anxie_1 ~1 0.021 -0.060 0.102 0.083 0.870 0.384
anxie_t1 ~1 1.404 1.300 1.507 5.376 44.707 0.000
d_anxie_1 ~~ d_anxie_1 0.066 -0.038 0.171 1.000 2.085 0.037
anxie_t1 ~~ d_anxie_1 -0.024 -0.072 0.023 -0.364 -1.690 0.091
d_anxie_1 ~~ sb07_10_t1 -0.014 -0.083 0.055 -0.055 -0.677 0.499
sb07_10_t1 ~~ sb07_10_t1 0.997 0.824 1.170 1.000 18.985 0.000

Correlation of specific, facet-level change goals with anxiety change score (ideal-personality) is not significantly different from zero, r = -0.055, p = 0.499.

6.4.2.41 Depression - current-personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8092.504 8176.611 0.905 0.107 0.118
# parameters of interest
params_lcs_depre_curr_hyp4 <- broom::tidy(fit_mi_lcs_depre_curr_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.071 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.607 NA NA
d_depre_1 ~1 -0.117 -0.220 -0.014 -0.310 -3.753 0.000
depre_t1 ~1 2.963 2.760 3.165 4.449 48.150 0.000
d_depre_1 ~~ d_depre_1 0.142 0.024 0.260 1.000 3.970 0.000
depre_t1 ~~ d_depre_1 -0.100 -0.198 -0.002 -0.397 -3.341 0.001
d_depre_1 ~~ sb06_01_t1 0.027 -0.079 0.133 0.072 0.841 0.400
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general change goal with depression change score (current-personality) is not significantly different from zero, r = 0.072, p = 0.4.

6.4.2.42 Depression - ideal-personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 6466.763 6550.87 0.913 0.063 0.064
# parameters of interest
params_lcs_depre_ideal_hyp4 <- broom::tidy(fit_mi_lcs_depre_ideal_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.035 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.886 NA NA
d_depre_1 ~1 0.018 -0.048 0.083 0.072 0.894 0.371
depre_t1 ~1 1.546 1.428 1.663 5.350 43.274 0.000
d_depre_1 ~~ d_depre_1 0.061 -0.013 0.135 1.000 2.717 0.007
depre_t1 ~~ d_depre_1 -0.033 -0.082 0.015 -0.467 -2.281 0.023
d_depre_1 ~~ sb06_01_t1 -0.016 -0.079 0.047 -0.064 -0.822 0.411
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general change goal with depression change score (ideal-personality) is not significantly different from zero, r = -0.064, p = 0.411.

6.4.2.43 Depression - current-personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8077.527 8161.634 0.811 0.161 0.185
# parameters of interest
params_lcs_depre_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_depre_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~~ sb07_11_t1", "sb07_11_t1 ~~ sb07_11_t1", # change goals
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.180 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.774 NA NA
d_depre_1 ~1 -0.115 -0.217 -0.012 -0.264 -3.681 0.000
depre_t1 ~1 2.962 2.760 3.164 4.476 48.145 0.000
d_depre_1 ~~ d_depre_1 0.189 0.023 0.354 1.000 3.758 0.000
depre_t1 ~~ d_depre_1 -0.156 -0.292 -0.020 -0.543 -3.778 0.000
d_depre_1 ~~ sb07_11_t1 0.136 0.004 0.269 0.314 3.386 0.001
sb07_11_t1 ~~ sb07_11_t1 0.997 0.875 1.119 1.000 26.880 0.000

The correlation of specific, facet-level change goals with the depression change score (current-personality) is significantly different from zero, r = 0.314, p = 0.001.

6.4.2.44 Depression - ideal-personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 6467.046 6551.153 0.901 0.067 0.067
# parameters of interest
params_lcs_depre_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_depre_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~~ sb07_11_t1", "sb07_11_t1 ~~ sb07_11_t1", # change goals
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.035 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.884 NA NA
d_depre_1 ~1 0.018 -0.048 0.085 0.073 0.902 0.367
depre_t1 ~1 1.546 1.428 1.663 5.312 43.279 0.000
d_depre_1 ~~ d_depre_1 0.062 -0.013 0.136 1.000 2.734 0.006
depre_t1 ~~ d_depre_1 -0.034 -0.082 0.015 -0.466 -2.288 0.022
d_depre_1 ~~ sb07_11_t1 0.013 -0.041 0.068 0.054 0.811 0.417
sb07_11_t1 ~~ sb07_11_t1 0.997 0.875 1.119 1.000 26.880 0.000

Correlation of specific, facet-level change goals with the depression change score (ideal-personality) is not significantly different from zero, r = 0.054, p = 0.417.

6.4.2.45 Volatility - current-personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8137.232 8221.339 0.965 0.061 0.086
# parameters of interest
params_lcs_volat_curr_hyp4 <- broom::tidy(fit_mi_lcs_volat_curr_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.162 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.671 NA NA
d_volat_1 ~1 -0.177 -0.325 -0.030 -0.311 -3.949 0.000
volat_t1 ~1 3.117 2.883 3.351 3.161 43.889 0.000
d_volat_1 ~~ d_volat_1 0.324 0.109 0.539 1.000 4.948 0.000
volat_t1 ~~ d_volat_1 -0.288 -0.471 -0.105 -0.514 -5.187 0.000
d_volat_1 ~~ sb06_01_t1 0.015 -0.121 0.151 0.026 0.354 0.724
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general change goal with volatility change score (current-personality) is not significantly different from zero, r = 0.026, p = 0.724.

6.4.2.46 Volatility - ideal-personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7251.022 7335.129 0.957 0.041 0.052
# parameters of interest
params_lcs_volat_ideal_hyp4 <- broom::tidy(fit_mi_lcs_volat_ideal_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 0.847 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.644 NA NA
d_volat_1 ~1 0.046 -0.057 0.149 0.143 1.463 0.144
volat_t1 ~1 1.599 1.471 1.726 3.803 41.347 0.000
d_volat_1 ~~ d_volat_1 0.102 -0.033 0.238 1.000 2.486 0.013
volat_t1 ~~ d_volat_1 -0.016 -0.089 0.056 -0.121 -0.741 0.459
d_volat_1 ~~ sb06_01_t1 -0.031 -0.124 0.062 -0.097 -1.101 0.271
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general change goal with volatility change score (ideal-personality) is not significantly different from zero, r = -0.097, p = 0.271.

6.4.2.47 Volatility - current-personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8132.027 8216.134 0.959 0.066 0.092
# parameters of interest
params_lcs_volat_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_volat_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~~ sb07_12_t1", "sb07_12_t1 ~~ sb07_12_t1", # change goals
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.192 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.712 NA NA
d_volat_1 ~1 -0.178 -0.326 -0.029 -0.301 -3.942 0.000
volat_t1 ~1 3.117 2.883 3.351 3.151 43.873 0.000
d_volat_1 ~~ d_volat_1 0.349 0.116 0.583 1.000 4.925 0.000
volat_t1 ~~ d_volat_1 -0.319 -0.514 -0.125 -0.546 -5.407 0.000
d_volat_1 ~~ sb07_12_t1 0.096 -0.056 0.247 0.162 2.071 0.038
sb07_12_t1 ~~ sb07_12_t1 0.997 0.844 1.150 1.000 21.424 0.000

Correlation of specific, facet-level change goals with volatility change score (current-personality) is significantly different from zero, r = 0.162, p = 0.038.

6.4.2.48 Volatility - ideal-personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7251.161 7335.268 0.971 0.034 0.044
# parameters of interest
params_lcs_volat_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_volat_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~~ sb07_12_t1", "sb07_12_t1 ~~ sb07_12_t1", # change goals
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 0.840 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.633 NA NA
d_volat_1 ~1 0.045 -0.058 0.148 0.143 1.447 0.148
volat_t1 ~1 1.599 1.472 1.726 3.812 41.368 0.000
d_volat_1 ~~ d_volat_1 0.100 -0.034 0.233 1.000 2.454 0.014
volat_t1 ~~ d_volat_1 -0.013 -0.084 0.057 -0.100 -0.618 0.537
d_volat_1 ~~ sb07_12_t1 0.029 -0.067 0.126 0.094 1.005 0.315
sb07_12_t1 ~~ sb07_12_t1 0.997 0.844 1.150 1.000 21.424 0.000

Correlation of specific, facet-level change goals with volatility change score (ideal-personality) is not significantly different from zero, r = 0.094, p = 0.315.

6.4.2.49 Curiosity - current-personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7952.839 8036.946 0.989 0.026 0.04
# parameters of interest
params_lcs_curio_curr_hyp4 <- broom::tidy(fit_mi_lcs_curio_curr_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.994 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.433 NA NA
d_curio_1 ~1 0.038 -0.043 0.118 0.198 1.537 0.124
curio_t1 ~1 4.182 4.035 4.329 9.590 93.797 0.000
d_curio_1 ~~ d_curio_1 0.036 -0.026 0.099 1.000 1.902 0.057
curio_t1 ~~ d_curio_1 -0.017 -0.067 0.034 -0.203 -1.095 0.273
d_curio_1 ~~ sb06_01_t1 -0.007 -0.079 0.065 -0.036 -0.316 0.752
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general change goal with curiosity change score (current-personality) is not significantly different from zero, r = -0.036, p = 0.752.

6.4.2.50 Curiosity - ideal-personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7926.982 8011.089 0.926 0.052 0.057
# parameters of interest
params_lcs_curio_ideal_hyp4 <- broom::tidy(fit_mi_lcs_curio_ideal_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.980 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.467 NA NA
d_curio_1 ~1 0.024 -0.044 0.091 0.168 1.147 0.251
curio_t1 ~1 4.536 4.417 4.654 15.423 126.046 0.000
d_curio_1 ~~ d_curio_1 0.020 -0.024 0.063 1.000 1.475 0.140
curio_t1 ~~ d_curio_1 -0.008 -0.037 0.021 -0.195 -0.906 0.365
d_curio_1 ~~ sb06_01_t1 0.026 -0.039 0.092 0.189 1.322 0.186
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general change goal with curiosity change score (ideal-personality) is not significantly different from zero, r = 0.189, p = 0.186.

6.4.2.51 Curiosity - current-personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7952.518 8036.625 0.953 0.054 0.076
# parameters of interest
params_lcs_curio_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_curio_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~~ sb07_13_t1", "sb07_13_t1 ~~ sb07_13_t1", # change goals
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.983 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.420 NA NA
d_curio_1 ~1 0.037 -0.042 0.117 0.201 1.538 0.124
curio_t1 ~1 4.182 4.035 4.329 9.666 93.832 0.000
d_curio_1 ~~ d_curio_1 0.034 -0.028 0.096 1.000 1.821 0.069
curio_t1 ~~ d_curio_1 -0.014 -0.066 0.038 -0.174 -0.879 0.379
d_curio_1 ~~ sb07_13_t1 0.015 -0.067 0.097 0.082 0.608 0.543
sb07_13_t1 ~~ sb07_13_t1 0.997 0.810 1.184 1.000 17.527 0.000

Correlation of specific, facet-level change goals with curiosity change score (current-personality) is not significantly different from zero, r = 0.082, p = 0.543.

6.4.2.52 Curiosity - ideal-personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7929.133 8013.24 0.951 0.042 0.054
# parameters of interest
params_lcs_curio_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_curio_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~~ sb07_13_t1", "sb07_13_t1 ~~ sb07_13_t1", # change goals
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.979 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.466 NA NA
d_curio_1 ~1 0.024 -0.045 0.093 0.166 1.130 0.259
curio_t1 ~1 4.536 4.417 4.654 15.149 125.972 0.000
d_curio_1 ~~ d_curio_1 0.020 -0.025 0.066 1.000 1.462 0.144
curio_t1 ~~ d_curio_1 -0.008 -0.039 0.022 -0.193 -0.889 0.374
d_curio_1 ~~ sb07_13_t1 -0.001 -0.063 0.062 -0.004 -0.027 0.978
sb07_13_t1 ~~ sb07_13_t1 0.997 0.810 1.184 1.000 17.527 0.000

Correlation of specific, facet-level change goals with curiosity change score (ideal-personality) is not significantly different from zero, r = -0.004, p = 0.978.

6.4.2.53 Aesthetic - current-personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8160.297 8244.404 1 0 0.031
# parameters of interest
params_lcs_aesth_curr_hyp4 <- broom::tidy(fit_mi_lcs_aesth_curr_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 1.000 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.489 NA NA
d_aesth_1 ~1 0.007 -0.024 0.039 0.075 0.783 0.433
aesth_t1 ~1 3.066 2.858 3.274 15.109 48.465 0.000
d_aesth_1 ~~ d_aesth_1 0.010 -0.016 0.036 1.000 1.231 0.218
aesth_t1 ~~ d_aesth_1 -0.005 -0.020 0.010 -0.244 -1.059 0.290
d_aesth_1 ~~ sb06_01_t1 -0.018 -0.053 0.016 -0.185 -1.735 0.083
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general change goal with aesthetic change score (current-personality) is not significantly different from zero, r = -0.185, p = 0.083.

6.4.2.54 Aesthetic - ideal-personality: general change goals

Results summary (sb06_01_t1 = general change goal):
(here there were some convergence problems with the standard model that the loop tried to fit)

mi_lcs_aesth_ideal_hyp4 <- '
aesth_t1 =~ 1*bf06_05_t1 + lamb2*bf06_20_t1 + lamb3*bf06_35_t1 + lamb4*bf06_50_t1 # This specifies the measurement model for aesth at T1
aesth_t2 =~ 1*bf06_05_t2 + lamb2*bf06_20_t2 + lamb3*bf06_35_t2 + lamb4*bf06_50_t2 # This specifies the measurement model for aesth at T2 (with equality constraints)

aesth_t2 ~ 1*aesth_t1     # This parameter regresses aesth_t2 perfectly on aesth_t1
d_aesth_1 =~ 1*aesth_t2   # This defines the latent change score factor as measured perfectly by scores on aesth_t2
aesth_t2 ~ 0*1            # This line constrains the intercept of aesth_t2 to 0
aesth_t2 ~~ 0*aesth_t2    # This fixes the variance of aesth_t2 to 0

d_aesth_1 ~ 1              # This estimates the intercept of the change score 
aesth_t1 ~ 1               # This estimates the intercept of aesth_t1 
d_aesth_1 ~~ d_aesth_1     # This estimates the variance of the change scores 
aesth_t1 ~~ aesth_t1       # This estimates the variance of aesth_t1 
aesth_t1 ~~ d_aesth_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_aesth_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

bf06_05_t1 ~~ bf06_05_t2   # This allows residual covariance on indicator X1 across T1 and T2
bf06_20_t1 ~~ bf06_20_t2   # This allows residual covariance on indicator X2 across T1 and T2
bf06_35_t1 ~~ bf06_35_t2   # This allows residual covariance on indicator X3 across T1 and T2
bf06_50_t1 ~~ bf06_50_t2   # This allows residual covariance on indicator X4 across T1 and T2

bf06_05_t1 ~~ res1*bf06_05_t1   # This allows residual variance on indicator X1 at T1 
bf06_20_t1 ~~ res2*bf06_20_t1   # This allows residual variance on indicator X2 at T1
bf06_35_t1 ~~ res3*bf06_35_t1   # This allows residual variance on indicator X3 at T1
bf06_50_t1 ~~ res4*bf06_50_t1   # This allows residual variance on indicator X4 at T1

bf06_05_t2 ~~ res1*bf06_05_t2  # This allows residual variance on indicator X1 at T2 
bf06_20_t2 ~~ res2*bf06_20_t2  # This allows residual variance on indicator X2 at T2 
bf06_35_t2 ~~ res3*bf06_35_t2  # This allows residual variance on indicator X3 at T2
bf06_50_t2 ~~ res4*bf06_50_t2  # This allows residual variance on indicator X4 at T2

bf06_05_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
bf06_20_t1 ~ m2*1     # This estimates the intercept of X2 at T1
bf06_35_t1 ~ m3*1     # This estimates the intercept of X3 at T1
bf06_50_t1 ~ m4*1     # This estimates the intercept of X4 at T1

bf06_05_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
bf06_20_t2 ~ m2*1     # This estimates the intercept of X2 at T2
bf06_35_t2 ~ m3*1     # This estimates the intercept of X3 at T2
bf06_50_t2 ~ m4*1     # This estimates the intercept of X4 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'

fit_mi_lcs_aesth_ideal_hyp4 <- lavaan(mi_lcs_aesth_ideal_hyp4, 
                                     data=df_sbsa2_wide_pers_sb %>% filter(!is.na(bf06_05_t1) & !is.na(bf06_05_t2)), 
                                     estimator='WLSMV', fixed.x=FALSE, ordered="sb06_01_t1") # need to use a different optimizer here!
# This model did not converge properly with FIML and missings. No problem with complete data, though. 
summary(fit_mi_lcs_aesth_ideal_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 569 iterations

  Estimator                                       DWLS
  Optimization method                           NLMINB
  Number of model parameters                        32
  Number of equality constraints                    10

  Number of observations                           289

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                                13.819      22.208
  Degrees of freedom                                34          34
  P-value (Chi-square)                           0.999       0.940
  Scaling correction factor                                  1.172
  Shift parameter                                           10.416
    simple second-order correction                                

Model Test Baseline Model:

  Test statistic                               684.025     390.308
  Degrees of freedom                                36          36
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.829

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    1.000       1.000
  Tucker-Lewis Index (TLI)                       1.033       1.035
                                                                  
  Robust Comparative Fit Index (CFI)                            NA
  Robust Tucker-Lewis Index (TLI)                               NA

Root Mean Square Error of Approximation:

  RMSEA                                          0.000       0.000
  90 Percent confidence interval - lower         0.000       0.000
  90 Percent confidence interval - upper         0.000       0.009
  P-value H_0: RMSEA <= 0.050                    1.000       1.000
  P-value H_0: RMSEA >= 0.080                    0.000       0.000
                                                                  
  Robust RMSEA                                                  NA
  90 Percent confidence interval - lower                        NA
  90 Percent confidence interval - upper                        NA
  P-value H_0: Robust RMSEA <= 0.050                            NA
  P-value H_0: Robust RMSEA >= 0.080                            NA

Standardized Root Mean Square Residual:

  SRMR                                           0.026       0.026

Parameter Estimates:

  Standard errors                           Robust.sem
  Information                                 Expected
  Information saturated (h1) model        Unstructured

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  aesth_t1 =~                                                           
    b06_05_           1.000                               0.015    0.010
    b06_20_ (lmb2)  -46.909    1.060  -44.238    0.000   -0.710   -0.698
    b06_35_ (lmb3)  -47.886    1.083  -44.198    0.000   -0.725   -0.773
    b06_50_ (lmb4)  -37.296    0.844  -44.183    0.000   -0.565   -0.509
  aesth_t2 =~                                                           
    b06_05_           1.000                               0.015    0.010
    b06_20_ (lmb2)  -46.909    1.060  -44.238    0.000   -0.718   -0.702
    b06_35_ (lmb3)  -47.886    1.083  -44.198    0.000   -0.733   -0.777
    b06_50_ (lmb4)  -37.296    0.844  -44.183    0.000   -0.571   -0.513
  d_aesth_1 =~                                                          
    asth_t2           1.000                               0.532    0.532

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  aesth_t2 ~                                                            
    aesth_t1          1.000                               0.989    0.989

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  aesth_t1 ~~                                                           
    d_aesth_1        -0.000    0.000   -1.737    0.082   -0.248   -0.248
  d_aesth_1 ~~                                                          
    sb06_01_t1        0.001    0.001    1.324    0.186    0.160    0.160
 .bf06_05_t1 ~~                                                         
   .bf06_05_t2        0.936    0.227    4.124    0.000    0.936    0.431
 .bf06_20_t1 ~~                                                         
   .bf06_20_t2        0.191    0.054    3.535    0.000    0.191    0.361
 .bf06_35_t1 ~~                                                         
   .bf06_35_t2       -0.091    0.040   -2.277    0.023   -0.091   -0.257
 .bf06_50_t1 ~~                                                         
   .bf06_50_t2        0.451    0.091    4.955    0.000    0.451    0.496

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .aesth_t2          0.000                               0.000    0.000
    d_aesth_1         0.000    0.001    0.011    0.992    0.002    0.002
    aesth_t1          2.935    0.074   39.501    0.000  193.912  193.912
   .bf06_05_1         0.000                               0.000    0.000
   .bf06_20_1 (m2)  141.939    0.361  392.926    0.000  141.939  139.580
   .bf06_35_1 (m3)  144.841    0.369  392.389    0.000  144.841  154.535
   .bf06_50_1 (m4)  113.499    0.288  394.694    0.000  113.499  102.382
   .bf06_05_2         0.000                               0.000    0.000
   .bf06_20_2 (m2)  141.939    0.361  392.926    0.000  141.939  138.827
   .bf06_35_2 (m3)  144.841    0.369  392.389    0.000  144.841  153.514
   .bf06_50_2 (m4)  113.499    0.288  394.694    0.000  113.499  102.087
    sb06_01_1         0.000    0.062    0.000    1.000    0.000    0.000

Thresholds:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
    sb06_01_t1|t1    -1.363                              -1.363   -1.363
    sb06_01_t1|t2    -0.666                              -0.666   -0.666
    sb06_01_t1|t3     0.463                               0.463    0.463
    sb06_01_t1|t4     1.363                               1.363    1.363

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .asth_t2           0.000                               0.000    0.000
    d_sth_1           0.000    0.000    4.460    0.000    1.000    1.000
    asth_t1           0.000    0.000    7.266    0.000    1.000    1.000
   .b06_05_ (res1)    2.173    0.285    7.624    0.000    2.173    1.000
   .b06_20_ (res2)    0.530    0.056    9.540    0.000    0.530    0.512
   .b06_35_ (res3)    0.353    0.047    7.523    0.000    0.353    0.402
   .b06_50_ (res4)    0.910    0.097    9.363    0.000    0.910    0.741
   .b06_05_ (res1)    2.173    0.285    7.624    0.000    2.173    1.000
   .b06_20_ (res2)    0.530    0.056    9.540    0.000    0.530    0.507
   .b06_35_ (res3)    0.353    0.047    7.523    0.000    0.353    0.397
   .b06_50_ (res4)    0.910    0.097    9.363    0.000    0.910    0.736
    s06_01_           1.000    1.000    1.000    0.317    1.000    1.000

Scales y*:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
    sb06_01_t1        1.000                               1.000    1.000
# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
289 22 NA NA 1 0 0.026
# parameters of interest
params_lcs_aesth_ideal_hyp4 <- broom::tidy(fit_mi_lcs_aesth_ideal_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.989 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.532 NA NA
d_aesth_1 ~1 0.000 -0.004 0.004 0.002 0.011 0.992
aesth_t1 ~1 2.935 2.691 3.180 193.912 39.501 0.000
d_aesth_1 ~~ d_aesth_1 0.000 0.000 0.000 1.000 4.460 0.000
aesth_t1 ~~ d_aesth_1 0.000 0.000 0.000 -0.248 -1.737 0.082
d_aesth_1 ~~ sb06_01_t1 0.001 -0.002 0.005 0.160 1.324 0.186
sb06_01_t1 ~~ sb06_01_t1 1.000 -2.291 4.291 1.000 1.000 0.317
sb06_01_t1 ~1 0.000 -0.204 0.204 0.000 0.000 1.000

Correlation of general change goal with aesthetic change score (ideal-personality) is not significantly different from zero, r = 0.16, p = 0.186.

6.4.2.55 Aesthetic - current-personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8165.62 8249.727 1 0.002 0.035
# parameters of interest
params_lcs_aesth_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_aesth_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~~ sb07_14_t1", "sb07_14_t1 ~~ sb07_14_t1", # change goals
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 1.001 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.488 NA NA
d_aesth_1 ~1 0.007 -0.024 0.039 0.074 0.768 0.443
aesth_t1 ~1 3.066 2.858 3.274 15.170 48.467 0.000
d_aesth_1 ~~ d_aesth_1 0.010 -0.016 0.036 1.000 1.227 0.220
aesth_t1 ~~ d_aesth_1 -0.005 -0.020 0.010 -0.246 -1.055 0.291
d_aesth_1 ~~ sb07_14_t1 -0.003 -0.031 0.026 -0.026 -0.292 0.771
sb07_14_t1 ~~ sb07_14_t1 0.997 0.845 1.149 1.000 21.633 0.000

Correlation of specific, facet-level change goals with aesthetic change score (current-personality) is not significantly different from zero, r = -0.026, p = 0.771.

6.4.2.56 Aesthetic - ideal-personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 8054.863 8138.97 0.977 0.037 0.058
# parameters of interest
params_lcs_aesth_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_aesth_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~~ sb07_14_t1", "sb07_14_t1 ~~ sb07_14_t1", # change goals
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.989 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.546 NA NA
d_aesth_1 ~1 0.000 -0.004 0.004 0.001 0.011 0.991
aesth_t1 ~1 2.936 2.707 3.165 151.698 42.178 0.000
d_aesth_1 ~~ d_aesth_1 0.000 0.000 0.000 1.000 2.280 0.023
aesth_t1 ~~ d_aesth_1 0.000 0.000 0.000 -0.257 -1.439 0.150
d_aesth_1 ~~ sb07_14_t1 -0.001 -0.004 0.003 -0.071 -0.708 0.479
sb07_14_t1 ~~ sb07_14_t1 0.997 0.845 1.149 1.000 21.633 0.000

Correlation of specific, facet-level change goals with aesthetic change score (ideal-personality) is not significantly different from zero, r = -0.071, p = 0.479.

6.4.2.57 Imagination - current-personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7775.936 7860.043 0.962 0.056 0.054
# parameters of interest
params_lcs_imagi_curr_hyp4 <- broom::tidy(fit_mi_lcs_imagi_curr_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.025 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.489 NA NA
d_imagi_1 ~1 0.111 -0.001 0.223 0.318 3.254 0.001
imagi_t1 ~1 3.644 3.476 3.812 4.978 71.253 0.000
d_imagi_1 ~~ d_imagi_1 0.122 -0.007 0.251 1.000 3.118 0.002
imagi_t1 ~~ d_imagi_1 -0.074 -0.184 0.037 -0.288 -2.198 0.028
d_imagi_1 ~~ sb06_01_t1 -0.015 -0.123 0.094 -0.042 -0.440 0.660
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general change goal with imagination change score (current-personality) is not significantly different from zero, r = -0.042, p = 0.66.

6.4.2.58 Imagination - ideal-personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7240.513 7324.62 0.939 0.048 0.054
# parameters of interest
params_lcs_imagi_ideal_hyp4 <- broom::tidy(fit_mi_lcs_imagi_ideal_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.069 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.743 NA NA
d_imagi_1 ~1 0.021 -0.063 0.106 0.081 0.830 0.407
imagi_t1 ~1 4.611 4.507 4.715 12.173 146.025 0.000
d_imagi_1 ~~ d_imagi_1 0.069 -0.012 0.151 1.000 2.805 0.005
imagi_t1 ~~ d_imagi_1 -0.044 -0.108 0.021 -0.438 -2.228 0.026
d_imagi_1 ~~ sb06_01_t1 0.010 -0.062 0.082 0.037 0.447 0.655
sb06_01_t1 ~~ sb06_01_t1 0.997 0.759 1.235 1.000 13.805 0.000
sb06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general change goal with imagination change score (ideal-personality) is not significantly different from zero, r = 0.037, p = 0.655.

6.4.2.59 Imagination - current-personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7772.585 7856.692 0.915 0.085 0.098
# parameters of interest
params_lcs_imagi_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_imagi_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~~ sb07_15_t1", "sb07_15_t1 ~~ sb07_15_t1", # change goals
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.044 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.512 NA NA
d_imagi_1 ~1 0.112 0.001 0.224 0.314 3.319 0.001
imagi_t1 ~1 3.644 3.476 3.813 4.996 71.264 0.000
d_imagi_1 ~~ d_imagi_1 0.128 -0.002 0.258 1.000 3.239 0.001
imagi_t1 ~~ d_imagi_1 -0.086 -0.199 0.028 -0.329 -2.488 0.013
d_imagi_1 ~~ sb07_15_t1 -0.062 -0.171 0.047 -0.174 -1.878 0.060
sb07_15_t1 ~~ sb07_15_t1 0.997 0.847 1.147 1.000 21.903 0.000

Correlation of specific, facet-level change goals with imagination change score (current-personality) is not significantly different from zero, r = -0.174, p = 0.06.

6.4.2.60 Imagination - ideal-personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 22 7240.519 7324.626 0.892 0.065 0.066
# parameters of interest
params_lcs_imagi_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_imagi_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~~ sb07_15_t1", "sb07_15_t1 ~~ sb07_15_t1", # change goals
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.068 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.740 NA NA
d_imagi_1 ~1 0.022 -0.062 0.106 0.083 0.853 0.394
imagi_t1 ~1 4.611 4.507 4.715 12.160 146.023 0.000
d_imagi_1 ~~ d_imagi_1 0.069 -0.012 0.150 1.000 2.793 0.005
imagi_t1 ~~ d_imagi_1 -0.043 -0.108 0.021 -0.435 -2.211 0.027
d_imagi_1 ~~ sb07_15_t1 -0.010 -0.083 0.064 -0.038 -0.443 0.658
sb07_15_t1 ~~ sb07_15_t1 0.997 0.847 1.147 1.000 21.903 0.000

Correlation of specific, facet-level change goals with imagination change score (ideal-personality) is not significantly different from zero, r = -0.038, p = 0.658.

6.4.3 Hyp 4: Effects summary

Run models for all facets with a template & loop:

Show the code
# create df for table:

df_table_hyp4 <- bind_rows(
  #traits
  params_lcs_extra_curr_hyp4 %>% filter(term=="d_extra_1 ~~ sb06_01_t1"),
  params_lcs_extra_ideal_hyp4 %>% filter(term=="d_extra_1 ~~ sb06_01_t1"),
  params_lcs_extra_curr_specif_hyp4 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_extra_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_agree_curr_hyp4 %>% filter(term=="d_agree_1 ~~ sb06_01_t1"),
  params_lcs_agree_ideal_hyp4 %>% filter(term=="d_agree_1 ~~ sb06_01_t1"),
  params_lcs_agree_curr_specif_hyp4 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_agree_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_consc_curr_hyp4 %>% filter(term=="d_consc_1 ~~ sb06_01_t1"),
  params_lcs_consc_ideal_hyp4 %>% filter(term=="d_consc_1 ~~ sb06_01_t1"),
  params_lcs_consc_curr_specif_hyp4 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_consc_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_neuro_curr_hyp4 %>% filter(term=="d_neuro_1 ~~ sb06_01_t1"),
  params_lcs_neuro_ideal_hyp4 %>% filter(term=="d_neuro_1 ~~ sb06_01_t1"),
  params_lcs_neuro_curr_specif_hyp4 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_neuro_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_openn_curr_hyp4 %>% filter(term=="d_openn_1 ~~ sb06_01_t1"),
  params_lcs_openn_ideal_hyp4 %>% filter(term=="d_openn_1 ~~ sb06_01_t1"),
  params_lcs_openn_curr_specif_hyp4 %>% filter(term=="goals ~~ d_openn_1"),
  params_lcs_openn_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_openn_1"),
  #facets
  params_lcs_socia_curr_hyp4 %>% filter(term=="d_socia_1 ~~ sb06_01_t1"),
  params_lcs_socia_ideal_hyp4 %>% filter(term=="d_socia_1 ~~ sb06_01_t1"),
  params_lcs_socia_curr_specif_hyp4 %>% filter(term=="d_socia_1 ~~ sb07_01_t1"),
  params_lcs_socia_ideal_specif_hyp4 %>% filter(term=="d_socia_1 ~~ sb07_01_t1"),
  params_lcs_asser_curr_hyp4 %>% filter(term=="d_asser_1 ~~ sb06_01_t1"),
  params_lcs_asser_ideal_hyp4 %>% filter(term=="d_asser_1 ~~ sb06_01_t1"),
  params_lcs_asser_curr_specif_hyp4 %>% filter(term=="d_asser_1 ~~ sb07_02_t1"),
  params_lcs_asser_ideal_specif_hyp4 %>% filter(term=="d_asser_1 ~~ sb07_02_t1"),
  params_lcs_energ_curr_hyp4 %>% filter(term=="d_energ_1 ~~ sb06_01_t1"),
  params_lcs_energ_ideal_hyp4 %>% filter(term=="d_energ_1 ~~ sb06_01_t1"),
  params_lcs_energ_curr_specif_hyp4 %>% filter(term=="d_energ_1 ~~ sb07_03_t1"),
  params_lcs_energ_ideal_specif_hyp4 %>% filter(term=="d_energ_1 ~~ sb07_03_t1"),
  params_lcs_compa_curr_hyp4 %>% filter(term=="d_compa_1 ~~ sb06_01_t1"),
  params_lcs_compa_ideal_hyp4 %>% filter(term=="d_compa_1 ~~ sb06_01_t1"),
  params_lcs_compa_curr_specif_hyp4 %>% filter(term=="d_compa_1 ~~ sb07_04_t1"),
  params_lcs_compa_ideal_specif_hyp4 %>% filter(term=="d_compa_1 ~~ sb07_04_t1"),
  params_lcs_respe_curr_hyp4 %>% filter(term=="d_respe_1 ~~ sb06_01_t1"),
  params_lcs_respe_ideal_hyp4 %>% filter(term=="d_respe_1 ~~ sb06_01_t1"),
  params_lcs_respe_curr_specif_hyp4 %>% filter(term=="d_respe_1 ~~ sb07_05_t1"),
  params_lcs_respe_ideal_specif_hyp4 %>% filter(term=="d_respe_1 ~~ sb07_05_t1"),
  params_lcs_trust_curr_hyp4 %>% filter(term=="d_trust_1 ~~ sb06_01_t1"),
  params_lcs_trust_ideal_hyp4 %>% filter(term=="d_trust_1 ~~ sb06_01_t1"),
  params_lcs_trust_curr_specif_hyp4 %>% filter(term=="d_trust_1 ~~ sb07_06_t1"),
  params_lcs_trust_ideal_specif_hyp4 %>% filter(term=="d_trust_1 ~~ sb07_06_t1"),
  params_lcs_organ_curr_hyp4 %>% filter(term=="d_organ_1 ~~ sb06_01_t1"),
  params_lcs_organ_ideal_hyp4 %>% filter(term=="d_organ_1 ~~ sb06_01_t1"),
  params_lcs_organ_curr_specif_hyp4 %>% filter(term=="d_organ_1 ~~ sb07_07_t1"),
  params_lcs_organ_ideal_specif_hyp4 %>% filter(term=="d_organ_1 ~~ sb07_07_t1"),
  params_lcs_produ_curr_hyp4 %>% filter(term=="d_produ_1 ~~ sb06_01_t1"),
  params_lcs_produ_ideal_hyp4 %>% filter(term=="d_produ_1 ~~ sb06_01_t1"),
  params_lcs_produ_curr_specif_hyp4 %>% filter(term=="d_produ_1 ~~ sb07_08_t1"),
  params_lcs_produ_ideal_specif_hyp4 %>% filter(term=="d_produ_1 ~~ sb07_08_t1"),
  params_lcs_respo_curr_hyp4 %>% filter(term=="d_respo_1 ~~ sb06_01_t1"),
  params_lcs_respo_ideal_hyp4 %>% filter(term=="d_respo_1 ~~ sb06_01_t1"),
  params_lcs_respo_curr_specif_hyp4 %>% filter(term=="d_respo_1 ~~ sb07_09_t1"),
  params_lcs_respo_ideal_specif_hyp4 %>% filter(term=="d_respo_1 ~~ sb07_09_t1"),
  params_lcs_anxie_curr_hyp4 %>% filter(term=="d_anxie_1 ~~ sb06_01_t1"),
  params_lcs_anxie_ideal_hyp4 %>% filter(term=="d_anxie_1 ~~ sb06_01_t1"),
  params_lcs_anxie_curr_specif_hyp4 %>% filter(term=="d_anxie_1 ~~ sb07_10_t1"),
  params_lcs_anxie_ideal_specif_hyp4 %>% filter(term=="d_anxie_1 ~~ sb07_10_t1"),
  params_lcs_depre_curr_hyp4 %>% filter(term=="d_depre_1 ~~ sb06_01_t1"),
  params_lcs_depre_ideal_hyp4 %>% filter(term=="d_depre_1 ~~ sb06_01_t1"),
  params_lcs_depre_curr_specif_hyp4 %>% filter(term=="d_depre_1 ~~ sb07_11_t1"),
  params_lcs_depre_ideal_specif_hyp4 %>% filter(term=="d_depre_1 ~~ sb07_11_t1"),
  params_lcs_volat_curr_hyp4 %>% filter(term=="d_volat_1 ~~ sb06_01_t1"),
  params_lcs_volat_ideal_hyp4 %>% filter(term=="d_volat_1 ~~ sb06_01_t1"),
  params_lcs_volat_curr_specif_hyp4 %>% filter(term=="d_volat_1 ~~ sb07_12_t1"),
  params_lcs_volat_ideal_specif_hyp4 %>% filter(term=="d_volat_1 ~~ sb07_12_t1"),
  params_lcs_curio_curr_hyp4 %>% filter(term=="d_curio_1 ~~ sb06_01_t1"),
  params_lcs_curio_ideal_hyp4 %>% filter(term=="d_curio_1 ~~ sb06_01_t1"),
  params_lcs_curio_curr_specif_hyp4 %>% filter(term=="d_curio_1 ~~ sb07_13_t1"),
  params_lcs_curio_ideal_specif_hyp4 %>% filter(term=="d_curio_1 ~~ sb07_13_t1"),
  params_lcs_aesth_curr_hyp4 %>% filter(term=="d_aesth_1 ~~ sb06_01_t1"),
  params_lcs_aesth_ideal_hyp4 %>% filter(term=="d_aesth_1 ~~ sb06_01_t1"),
  params_lcs_aesth_curr_specif_hyp4 %>% filter(term=="d_aesth_1 ~~ sb07_14_t1"),
  params_lcs_aesth_ideal_specif_hyp4 %>% filter(term=="d_aesth_1 ~~ sb07_14_t1"),
  params_lcs_imagi_curr_hyp4 %>% filter(term=="d_imagi_1 ~~ sb06_01_t1"),
  params_lcs_imagi_ideal_hyp4 %>% filter(term=="d_imagi_1 ~~ sb06_01_t1"),
  params_lcs_imagi_curr_specif_hyp4 %>% filter(term=="d_imagi_1 ~~ sb07_15_t1"),
  params_lcs_imagi_ideal_specif_hyp4 %>% filter(term=="d_imagi_1 ~~ sb07_15_t1"),
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=4),
         ref = rep(rep(c("current", "ideal"), 2), 20),
         goal = rep(c(rep("general", 2), rep("specific", 2)), 20)) %>% 
  select(trait, ref, goal, estimate, std.all, statistic, p.value)

Results summary across the Big Five traits: covariance of the latent change score and change goal(s)

kable(df_table_hyp4[1:20, ], digits = 3)
trait ref goal estimate std.all statistic p.value
extraversion current general -0.026 -0.088 -1.090 0.276
extraversion ideal general 0.002 0.009 0.094 0.925
extraversion current specific -0.036 -0.235 -1.264 0.206
extraversion ideal specific 0.012 0.113 0.812 0.417
agreeableness current general 0.022 0.110 1.383 0.167
agreeableness ideal general 0.009 0.032 0.438 0.662
agreeableness current specific -0.010 -0.072 -0.728 0.467
agreeableness ideal specific -0.003 -0.014 -0.150 0.880
conscientiousness current general 0.022 0.053 0.619 0.536
conscientiousness ideal general 0.011 0.043 0.538 0.590
conscientiousness current specific -0.073 -0.213 -2.365 0.018
conscientiousness ideal specific -0.023 -0.113 -1.255 0.209
neuroticism current general -0.004 -0.009 -0.123 0.902
neuroticism ideal general -0.045 -0.122 -1.665 0.096
neuroticism current specific 0.089 0.248 3.053 0.002
neuroticism ideal specific 0.018 0.068 0.847 0.397
openness current general -0.016 -0.059 -0.692 0.489
openness ideal general 0.002 0.017 0.197 0.844
openness current specific -0.021 -0.130 -1.392 0.164
openness ideal specific -0.002 -0.017 -0.177 0.860

Two covariances/correlations that significantly differ from zero:
- Changes in current-level conscientiousness covary with the specific trait goals (latent factor of the three C facets).
- Changes in current-level neuroticism covary with the specific trait goals (latent factor of the three N facets).

Results summary across the Big Five facets: covariance of the latent change score and change goal(s)

kable(df_table_hyp4[21:80, ], digits = 3)
trait ref goal estimate std.all statistic p.value
sociability current general -0.025 -0.065 -0.796 0.426
sociability ideal general 0.042 0.153 1.531 0.126
sociability current specific -0.082 -0.203 -2.128 0.033
sociability ideal specific -0.033 -0.126 -1.224 0.221
assertiveness current general -0.019 -0.069 -0.848 0.397
assertiveness ideal general -0.013 -0.067 -0.629 0.530
assertiveness current specific -0.052 -0.189 -2.134 0.033
assertiveness ideal specific 0.008 0.039 0.405 0.686
energy current general -0.016 -0.103 -0.976 0.329
energy ideal general 0.000 -0.001 -0.008 0.993
energy current specific 0.001 0.007 0.074 0.941
energy ideal specific -0.002 -0.016 -0.153 0.879
compassion current general 0.026 0.109 1.014 0.311
compassion ideal general -0.029 -0.131 -1.012 0.312
compassion current specific -0.008 -0.031 -0.264 0.792
compassion ideal specific 0.013 0.060 0.403 0.687
respectfulness current general 0.000 0.001 0.013 0.990
respectfulness ideal general 0.008 0.036 0.367 0.714
respectfulness current specific -0.049 -0.150 -1.915 0.056
respectfulness ideal specific -0.037 -0.151 -1.591 0.112
trust current general 0.035 0.118 1.089 0.276
trust ideal general 0.006 0.045 0.260 0.795
trust current specific 0.025 0.082 0.739 0.460
trust ideal specific 0.024 0.182 1.019 0.308
organization current general 0.007 0.015 0.163 0.871
organization ideal general -0.004 -0.016 -0.165 0.869
organization current specific -0.094 -0.190 -1.890 0.059
organization ideal specific -0.033 -0.115 -1.133 0.257
productiveness current general 0.004 0.007 0.075 0.940
productiveness ideal general 0.021 0.082 0.856 0.392
productiveness current specific -0.146 -0.224 -2.677 0.007
productiveness ideal specific -0.029 -0.118 -1.415 0.157
responsibility current general 0.011 0.044 0.457 0.648
responsibility ideal general 0.015 0.079 0.800 0.424
responsibility current specific -0.044 -0.161 -1.683 0.092
responsibility ideal specific -0.007 -0.035 -0.346 0.729
anxiety current general -0.020 -0.048 -0.419 0.675
anxiety ideal general -0.046 -0.180 -1.907 0.056
anxiety current specific 0.016 0.037 0.319 0.750
anxiety ideal specific -0.014 -0.055 -0.677 0.499
depression current general 0.027 0.072 0.841 0.400
depression ideal general -0.016 -0.064 -0.822 0.411
depression current specific 0.136 0.314 3.386 0.001
depression ideal specific 0.013 0.054 0.811 0.417
volatility current general 0.015 0.026 0.354 0.724
volatility ideal general -0.031 -0.097 -1.101 0.271
volatility current specific 0.096 0.162 2.071 0.038
volatility ideal specific 0.029 0.094 1.005 0.315
curiosity current general -0.007 -0.036 -0.316 0.752
curiosity ideal general 0.026 0.189 1.322 0.186
curiosity current specific 0.015 0.082 0.608 0.543
curiosity ideal specific -0.001 -0.004 -0.027 0.978
aesthetic current general -0.018 -0.185 -1.735 0.083
aesthetic ideal general 0.001 0.160 1.324 0.186
aesthetic current specific -0.003 -0.026 -0.292 0.771
aesthetic ideal specific -0.001 -0.071 -0.708 0.479
imagination current general -0.015 -0.042 -0.440 0.660
imagination ideal general 0.010 0.037 0.447 0.655
imagination current specific -0.062 -0.174 -1.878 0.060
imagination ideal specific -0.010 -0.038 -0.443 0.658

Looking at the facets, we see five covariances that significantly differ from zero (at p < .05):
- For sociability and assertiveness, changes in the current-level the specific facet change goal (both effects barely significant and in unexpected direction).
- For productiveness, changes in the current-level the specific facet change goal.
- Changes in current-level depression and volatility covary with the respective specific facet change goal.

Prepare data frame for plotting:

Show the code
df_table_hyp4_plot <- bind_rows(
  #traits
  params_lcs_extra_curr_hyp4 %>% filter(term=="d_extra_1 ~~ sb06_01_t1"),
  params_lcs_extra_ideal_hyp4 %>% filter(term=="d_extra_1 ~~ sb06_01_t1"),
  params_lcs_extra_curr_specif_hyp4 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_extra_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_agree_curr_hyp4 %>% filter(term=="d_agree_1 ~~ sb06_01_t1"),
  params_lcs_agree_ideal_hyp4 %>% filter(term=="d_agree_1 ~~ sb06_01_t1"),
  params_lcs_agree_curr_specif_hyp4 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_agree_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_consc_curr_hyp4 %>% filter(term=="d_consc_1 ~~ sb06_01_t1"),
  params_lcs_consc_ideal_hyp4 %>% filter(term=="d_consc_1 ~~ sb06_01_t1"),
  params_lcs_consc_curr_specif_hyp4 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_consc_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_neuro_curr_hyp4 %>% filter(term=="d_neuro_1 ~~ sb06_01_t1"),
  params_lcs_neuro_ideal_hyp4 %>% filter(term=="d_neuro_1 ~~ sb06_01_t1"),
  params_lcs_neuro_curr_specif_hyp4 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_neuro_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_openn_curr_hyp4 %>% filter(term=="d_openn_1 ~~ sb06_01_t1"),
  params_lcs_openn_ideal_hyp4 %>% filter(term=="d_openn_1 ~~ sb06_01_t1"),
  params_lcs_openn_curr_specif_hyp4 %>% filter(term=="goals ~~ d_openn_1"),
  params_lcs_openn_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_openn_1"),
  #facets
  params_lcs_socia_curr_hyp4 %>% filter(term=="d_socia_1 ~~ sb06_01_t1"),
  params_lcs_socia_ideal_hyp4 %>% filter(term=="d_socia_1 ~~ sb06_01_t1"),
  params_lcs_socia_curr_specif_hyp4 %>% filter(term=="d_socia_1 ~~ sb07_01_t1"),
  params_lcs_socia_ideal_specif_hyp4 %>% filter(term=="d_socia_1 ~~ sb07_01_t1"),
  params_lcs_asser_curr_hyp4 %>% filter(term=="d_asser_1 ~~ sb06_01_t1"),
  params_lcs_asser_ideal_hyp4 %>% filter(term=="d_asser_1 ~~ sb06_01_t1"),
  params_lcs_asser_curr_specif_hyp4 %>% filter(term=="d_asser_1 ~~ sb07_02_t1"),
  params_lcs_asser_ideal_specif_hyp4 %>% filter(term=="d_asser_1 ~~ sb07_02_t1"),
  params_lcs_energ_curr_hyp4 %>% filter(term=="d_energ_1 ~~ sb06_01_t1"),
  params_lcs_energ_ideal_hyp4 %>% filter(term=="d_energ_1 ~~ sb06_01_t1"),
  params_lcs_energ_curr_specif_hyp4 %>% filter(term=="d_energ_1 ~~ sb07_03_t1"),
  params_lcs_energ_ideal_specif_hyp4 %>% filter(term=="d_energ_1 ~~ sb07_03_t1"),
  params_lcs_compa_curr_hyp4 %>% filter(term=="d_compa_1 ~~ sb06_01_t1"),
  params_lcs_compa_ideal_hyp4 %>% filter(term=="d_compa_1 ~~ sb06_01_t1"),
  params_lcs_compa_curr_specif_hyp4 %>% filter(term=="d_compa_1 ~~ sb07_04_t1"),
  params_lcs_compa_ideal_specif_hyp4 %>% filter(term=="d_compa_1 ~~ sb07_04_t1"),
  params_lcs_respe_curr_hyp4 %>% filter(term=="d_respe_1 ~~ sb06_01_t1"),
  params_lcs_respe_ideal_hyp4 %>% filter(term=="d_respe_1 ~~ sb06_01_t1"),
  params_lcs_respe_curr_specif_hyp4 %>% filter(term=="d_respe_1 ~~ sb07_05_t1"),
  params_lcs_respe_ideal_specif_hyp4 %>% filter(term=="d_respe_1 ~~ sb07_05_t1"),
  params_lcs_trust_curr_hyp4 %>% filter(term=="d_trust_1 ~~ sb06_01_t1"),
  params_lcs_trust_ideal_hyp4 %>% filter(term=="d_trust_1 ~~ sb06_01_t1"),
  params_lcs_trust_curr_specif_hyp4 %>% filter(term=="d_trust_1 ~~ sb07_06_t1"),
  params_lcs_trust_ideal_specif_hyp4 %>% filter(term=="d_trust_1 ~~ sb07_06_t1"),
  params_lcs_organ_curr_hyp4 %>% filter(term=="d_organ_1 ~~ sb06_01_t1"),
  params_lcs_organ_ideal_hyp4 %>% filter(term=="d_organ_1 ~~ sb06_01_t1"),
  params_lcs_organ_curr_specif_hyp4 %>% filter(term=="d_organ_1 ~~ sb07_07_t1"),
  params_lcs_organ_ideal_specif_hyp4 %>% filter(term=="d_organ_1 ~~ sb07_07_t1"),
  params_lcs_produ_curr_hyp4 %>% filter(term=="d_produ_1 ~~ sb06_01_t1"),
  params_lcs_produ_ideal_hyp4 %>% filter(term=="d_produ_1 ~~ sb06_01_t1"),
  params_lcs_produ_curr_specif_hyp4 %>% filter(term=="d_produ_1 ~~ sb07_08_t1"),
  params_lcs_produ_ideal_specif_hyp4 %>% filter(term=="d_produ_1 ~~ sb07_08_t1"),
  params_lcs_respo_curr_hyp4 %>% filter(term=="d_respo_1 ~~ sb06_01_t1"),
  params_lcs_respo_ideal_hyp4 %>% filter(term=="d_respo_1 ~~ sb06_01_t1"),
  params_lcs_respo_curr_specif_hyp4 %>% filter(term=="d_respo_1 ~~ sb07_09_t1"),
  params_lcs_respo_ideal_specif_hyp4 %>% filter(term=="d_respo_1 ~~ sb07_09_t1"),
  params_lcs_anxie_curr_hyp4 %>% filter(term=="d_anxie_1 ~~ sb06_01_t1"),
  params_lcs_anxie_ideal_hyp4 %>% filter(term=="d_anxie_1 ~~ sb06_01_t1"),
  params_lcs_anxie_curr_specif_hyp4 %>% filter(term=="d_anxie_1 ~~ sb07_10_t1"),
  params_lcs_anxie_ideal_specif_hyp4 %>% filter(term=="d_anxie_1 ~~ sb07_10_t1"),
  params_lcs_depre_curr_hyp4 %>% filter(term=="d_depre_1 ~~ sb06_01_t1"),
  params_lcs_depre_ideal_hyp4 %>% filter(term=="d_depre_1 ~~ sb06_01_t1"),
  params_lcs_depre_curr_specif_hyp4 %>% filter(term=="d_depre_1 ~~ sb07_11_t1"),
  params_lcs_depre_ideal_specif_hyp4 %>% filter(term=="d_depre_1 ~~ sb07_11_t1"),
  params_lcs_volat_curr_hyp4 %>% filter(term=="d_volat_1 ~~ sb06_01_t1"),
  params_lcs_volat_ideal_hyp4 %>% filter(term=="d_volat_1 ~~ sb06_01_t1"),
  params_lcs_volat_curr_specif_hyp4 %>% filter(term=="d_volat_1 ~~ sb07_12_t1"),
  params_lcs_volat_ideal_specif_hyp4 %>% filter(term=="d_volat_1 ~~ sb07_12_t1"),
  params_lcs_curio_curr_hyp4 %>% filter(term=="d_curio_1 ~~ sb06_01_t1"),
  params_lcs_curio_ideal_hyp4 %>% filter(term=="d_curio_1 ~~ sb06_01_t1"),
  params_lcs_curio_curr_specif_hyp4 %>% filter(term=="d_curio_1 ~~ sb07_13_t1"),
  params_lcs_curio_ideal_specif_hyp4 %>% filter(term=="d_curio_1 ~~ sb07_13_t1"),
  params_lcs_aesth_curr_hyp4 %>% filter(term=="d_aesth_1 ~~ sb06_01_t1"),
  params_lcs_aesth_ideal_hyp4 %>% filter(term=="d_aesth_1 ~~ sb06_01_t1"),
  params_lcs_aesth_curr_specif_hyp4 %>% filter(term=="d_aesth_1 ~~ sb07_14_t1"),
  params_lcs_aesth_ideal_specif_hyp4 %>% filter(term=="d_aesth_1 ~~ sb07_14_t1"),
  params_lcs_imagi_curr_hyp4 %>% filter(term=="d_imagi_1 ~~ sb06_01_t1"),
  params_lcs_imagi_ideal_hyp4 %>% filter(term=="d_imagi_1 ~~ sb06_01_t1"),
  params_lcs_imagi_curr_specif_hyp4 %>% filter(term=="d_imagi_1 ~~ sb07_15_t1"),
  params_lcs_imagi_ideal_specif_hyp4 %>% filter(term=="d_imagi_1 ~~ sb07_15_t1"),
) %>% 
  mutate(trait = rep(names(b5_vars), each=4),
         ref = rep(rep(c("current", "ideal"), 2), 20),
         goal = rep(c(rep("general", 2), rep("specific", 2)), 20)) %>% 
  select(trait, ref, goal, estimate, conf.low, conf.high, std.all, statistic, p.value)

df_table_hyp4_plot <- df_table_hyp4_plot %>% 
  mutate(include_0 = ifelse(conf.low < 0 & conf.high > 0, "n.s.", "*")) %>% 
  mutate(ref = factor(ref, levels = c("current", "ideal"), labels = c("current", "ideal"))) %>% 
  mutate(goal = factor(goal, levels = c("general", "specific"), labels = c("general", "specific"))) %>% 
  mutate(trait = factor(trait, levels = names(b5_vars), labels = names(b5_vars)))

Plotting the effect size across all analyses:

  • current = current-level personality
  • ideal = ideal-level personality
  • general = general change goal
  • specific = specific, facet-level change goal(s)
Show the code
ggplot(df_table_hyp4_plot, aes(x = fct_rev(trait), y = estimate, color = include_0)) +
  geom_hline(yintercept=0, linetype = 3) +
  geom_point(size=3, position=position_dodge(0.4)) + 
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high, color = include_0), width=.2, position=position_dodge(0.4)) +
  scale_color_manual(values = c("#000000","#A9A9A9")) +   
  facet_wrap( ~ ref + goal, ncol = 2) +
  theme_bw() +
  scale_shape_manual(values=c(18)) + 
  ylab("Effect Estimates (99.9% / 95% CI)") +
  xlab("") +
  theme(legend.title=element_blank()) +
  theme(legend.text=element_text(size=12)) +
  coord_flip() +
  theme(strip.text.x = element_text(size = 12)) +
  theme(axis.text.x=element_text(size=10, angle = 45, hjust = 1), axis.text.y=element_text(size=12)) + 
  guides(color="none")

6.5 H5: Acceptance goals and change in personality (current / ideal) in self-acceptance group

Not specifically preregistered for study 2 because we were foremost interested in the moderation hypothesis (H7 in prereg / H3 in paper) and thought that it was somewhat redundant with these models of correlations with the change score. I still ran the models for study 2 here (without the control group and for changes between T1 and T2) in case the comparison with study 1 is of interest.

In the self-acceptance group, there will be a correlation between acceptance goals and change in ideal-personality ratings but not change in current-personality ratings.

We will test this one domain/facet at a time. We will use both general continuous change goal score as well as trait-specific change goals. To test this hypothesis, we will estimate the mean-level difference across time for both current and ideal trait ratings using latent change models and correlate change goals with the change variable from those models.

Reshape and split data set by intervention group:

Show the code
# from T1 to T2
df_sbsa2_wide_pers_sa <- df_sbsa2 %>% 
  filter(rando=="Self-Acceptance" & time %in% c(1,2)) %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sa07")), # facet-specific change goals
         sa06_01) %>% # general change goal
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with("sa07"), sa06_01)) %>% 
  select(-c(sa07_01_t2, sa07_02_t2, sa07_03_t2, sa07_04_t2, sa07_05_t2, 
            sa07_06_t2, sa07_07_t2, sa07_08_t2, sa07_09_t2, sa07_10_t2, 
            sa07_11_t2, sa07_12_t2, sa07_13_t2, sa07_14_t2, sa07_15_t2, sa06_01_t2))
# standardize goal variables (better interpretation for when they are in SEM as a single manifest variable, not so much a problem when they form a latent scale)
df_sbsa2_wide_pers_sa <- df_sbsa2_wide_pers_sa %>% 
  mutate_at(c(colnames(df_sbsa2_wide_pers_sa)[-1]), ~(scale(.) %>% as.vector)) 
# colnames(df_sbsa2_wide_pers_sa)

group_assign <- df_sbsa2 %>% select(pid, rando) %>% unique()

df_sbsa2_wide_pers_sa <- df_sbsa2_wide_pers %>% left_join(group_assign) %>% filter(rando=="Self-Acceptance") %>% select(-rando, -ends_with("_t3")) %>%
  left_join(df_sbsa2_wide_pers_sa)

# follow-up, from T2 to T3 (for later)
df_sbsa2_wide_pers_sa_fu <- df_sbsa2 %>% 
  filter(rando=="Self-Acceptance" & time %in% c(2,3)) %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sa07")), # facet-specific change goals
         sa06_01) %>% # general change goal
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with("sa07"), sa06_01)) %>% 
  select(-c(sa07_01_t2, sa07_02_t2, sa07_03_t2, sa07_04_t2, sa07_05_t2, 
            sa07_06_t2, sa07_07_t2, sa07_08_t2, sa07_09_t2, sa07_10_t2, 
            sa07_11_t2, sa07_12_t2, sa07_13_t2, sa07_14_t2, sa07_15_t2, sa06_01_t2))
# standardize goal variables (better interpretation for when they are in SEM as a single manifest variable, not so much a problem when they form a latent scale)
df_sbsa2_wide_pers_sa_fu <- df_sbsa2_wide_pers_sa_fu %>% 
  mutate_at(c(colnames(df_sbsa2_wide_pers_sa_fu)[-1]), ~(scale(.) %>% as.vector)) 
# colnames(df_sbsa2_wide_pers_sa)

df_sbsa2_wide_pers_sa_fu <- df_sbsa2_wide_pers %>% left_join(group_assign) %>% filter(rando=="Self-Acceptance" & !is.na(valid_t2)) %>% select(-rando, -ends_with("_t1")) %>%
  left_join(df_sbsa2_wide_pers_sa_fu)

6.5.1 Big Five traits

6.5.1.1 Extraversion - current-personality: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_curr_hyp5 <- '
extra_t1 =~ 1*extra_curr_par1_t1 + lamb2*extra_curr_par2_t1 + lamb3*extra_curr_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_curr_par1_t2 + lamb2*extra_curr_par2_t2 + lamb3*extra_curr_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
extra_t1 ~~ d_extra_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

extra_curr_par1_t1 ~~ extra_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_curr_par2_t1 ~~ extra_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_curr_par3_t1 ~~ extra_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_curr_par1_t1 ~~ res1*extra_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_curr_par2_t1 ~~ res2*extra_curr_par2_t1   # This allows residual variance on indicator X2 at T1
extra_curr_par3_t1 ~~ res3*extra_curr_par3_t1   # This allows residual variance on indicator X3 at T1

extra_curr_par1_t2 ~~ res1*extra_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_curr_par2_t2 ~~ res2*extra_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_curr_par3_t2 ~~ res3*extra_curr_par3_t2  # This allows residual variance on indicator X3 at T2

extra_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_extra_curr_hyp5 <- lavaan(mi_lcs_extra_curr_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_curr_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 18 4459.168 4527.876 0.992 0.041 0.043
# parameters of interest
params_lcs_extra_curr_hyp5 <- broom::tidy(fit_mi_lcs_extra_curr_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                     "d_extra_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                     "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.025 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.449 NA NA
d_extra_1 ~1 0.089 0.015 0.164 0.342 3.955 0.000
extra_t1 ~1 3.032 2.884 3.179 5.092 67.772 0.000
d_extra_1 ~~ d_extra_1 0.068 0.012 0.124 1.000 3.985 0.000
extra_t1 ~~ d_extra_1 -0.043 -0.089 0.004 -0.274 -3.021 0.003
d_extra_1 ~~ sa06_01_t1 0.009 -0.058 0.077 0.035 0.446 0.656
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

The correlation of general acceptance goal with the extraversion change score (current-personality) is not significantly different from zero, r = 0.035, p = 0.656.

6.5.1.2 Extraversion - ideal-personality: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_ideal_hyp5 <- '
extra_t1 =~ 1*extra_ideal_par1_t1 + lamb2*extra_ideal_par2_t1 + lamb3*extra_ideal_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_ideal_par1_t2 + lamb2*extra_ideal_par2_t2 + lamb3*extra_ideal_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
extra_t1 ~~ d_extra_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

extra_ideal_par1_t1 ~~ extra_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_ideal_par2_t1 ~~ extra_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_ideal_par3_t1 ~~ extra_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_ideal_par1_t1 ~~ res1*extra_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_ideal_par2_t1 ~~ res2*extra_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
extra_ideal_par3_t1 ~~ res3*extra_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

extra_ideal_par1_t2 ~~ res1*extra_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_ideal_par2_t2 ~~ res2*extra_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_ideal_par3_t2 ~~ res3*extra_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

extra_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_extra_ideal_hyp5 <- lavaan(mi_lcs_extra_ideal_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_ideal_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 18 3930.006 3998.714 0.96 0.06 0.071
# parameters of interest
params_lcs_extra_ideal_hyp5 <- broom::tidy(fit_mi_lcs_extra_ideal_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.993 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.646 NA NA
d_extra_1 ~1 -0.019 -0.102 0.065 -0.072 -0.737 0.461
extra_t1 ~1 3.689 3.582 3.796 9.261 113.383 0.000
d_extra_1 ~~ d_extra_1 0.067 -0.001 0.135 1.000 3.253 0.001
extra_t1 ~~ d_extra_1 -0.032 -0.074 0.009 -0.315 -2.561 0.010
d_extra_1 ~~ sa06_01_t1 0.018 -0.058 0.094 0.070 0.778 0.437
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with extraversion change score (ideal-personality) is not significantly different from zero, r = 0.07, p = 0.437.

6.5.1.3 Extraversion - current-personality: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_curr_specif_hyp5 <- '
extra_t1 =~ 1*extra_curr_par1_t1 + lamb2*extra_curr_par2_t1 + lamb3*extra_curr_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_curr_par1_t2 + lamb2*extra_curr_par2_t2 + lamb3*extra_curr_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

goals =~ 1*sa07_01_t1 + sa07_02_t1 + sa07_03_t1 # latent acceptance goal variable (three facets per trait)

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
extra_t1 ~~ d_extra_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

extra_curr_par1_t1 ~~ extra_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_curr_par2_t1 ~~ extra_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_curr_par3_t1 ~~ extra_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_curr_par1_t1 ~~ res1*extra_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_curr_par2_t1 ~~ res2*extra_curr_par2_t1   # This allows residual variance on indicator X2 at T1
extra_curr_par3_t1 ~~ res3*extra_curr_par3_t1   # This allows residual variance on indicator X3 at T1

extra_curr_par1_t2 ~~ res1*extra_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_curr_par2_t2 ~~ res2*extra_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_curr_par3_t2 ~~ res3*extra_curr_par3_t2  # This allows residual variance on indicator X3 at T2

extra_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_01_t1 ~~ sa07_01_t1
sa07_02_t1 ~~ sa07_02_t1
sa07_03_t1 ~~ sa07_03_t1

sa07_01_t1 ~ 1
sa07_02_t1 ~ 1
sa07_03_t1 ~ 1
'
fit_mi_lcs_extra_curr_specif_hyp5 <- lavaan(mi_lcs_extra_curr_specif_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_curr_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 25 6278.21 6373.638 0.919 0.107 0.155
# parameters of interest
params_lcs_extra_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_extra_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "goals ~~ d_extra_1", "goals ~~ goals", # acceptance goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.048 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.472 NA NA
d_extra_1 ~1 0.089 0.015 0.163 0.333 3.958 0.000
extra_t1 ~1 3.032 2.885 3.179 5.098 67.832 0.000
d_extra_1 ~~ d_extra_1 0.072 0.011 0.132 1.000 3.913 0.000
extra_t1 ~~ d_extra_1 -0.052 -0.102 -0.002 -0.325 -3.396 0.001
goals ~~ d_extra_1 -0.026 -0.097 0.046 -0.147 -1.181 0.237
goals ~~ goals 0.421 0.056 0.786 1.000 3.799 0.000

Correlation of specific, facet-level acceptance goals with extraversion change score (current-personality) is not significantly different from zero, r = -0.147, p = 0.237.

6.5.1.4 Extraversion - ideal-personality: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_ideal_specif_hyp5 <- '
extra_t1 =~ 1*extra_ideal_par1_t1 + lamb2*extra_ideal_par2_t1 + lamb3*extra_ideal_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_ideal_par1_t2 + lamb2*extra_ideal_par2_t2 + lamb3*extra_ideal_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

goals =~ 1*sa07_01_t1 + sa07_02_t1 + sa07_03_t1 # latent acceptance goal variable (three facets per trait)

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
extra_t1 ~~ d_extra_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

extra_ideal_par1_t1 ~~ extra_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_ideal_par2_t1 ~~ extra_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_ideal_par3_t1 ~~ extra_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_ideal_par1_t1 ~~ res1*extra_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_ideal_par2_t1 ~~ res2*extra_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
extra_ideal_par3_t1 ~~ res3*extra_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

extra_ideal_par1_t2 ~~ res1*extra_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_ideal_par2_t2 ~~ res2*extra_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_ideal_par3_t2 ~~ res3*extra_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

extra_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_01_t1 ~~ sa07_01_t1
sa07_02_t1 ~~ sa07_02_t1
sa07_03_t1 ~~ sa07_03_t1

sa07_01_t1 ~ 1
sa07_02_t1 ~ 1
sa07_03_t1 ~ 1
'
fit_mi_lcs_extra_ideal_specif_hyp5 <- lavaan(mi_lcs_extra_ideal_specif_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_ideal_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 25 5751.142 5846.57 0.994 0.019 0.045
# parameters of interest
params_lcs_extra_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_extra_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "goals ~~ d_extra_1", "goals ~~ goals", # acceptance goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.984 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.635 NA NA
d_extra_1 ~1 -0.019 -0.103 0.064 -0.075 -0.765 0.444
extra_t1 ~1 3.689 3.582 3.796 9.207 113.364 0.000
d_extra_1 ~~ d_extra_1 0.067 -0.002 0.135 1.000 3.213 0.001
extra_t1 ~~ d_extra_1 -0.031 -0.072 0.011 -0.298 -2.441 0.015
goals ~~ d_extra_1 -0.008 -0.067 0.051 -0.048 -0.443 0.658
goals ~~ goals 0.411 0.048 0.773 1.000 3.723 0.000

Correlation of specific, facet-level acceptance goals with extraversion change score (ideal-personality) is not significantly different from zero, r = -0.048, p = 0.658.

6.5.1.5 Agreeableness - current-personality: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_curr_hyp5 <- '
agree_t1 =~ 1*agree_curr_par1_t1 + lamb2*agree_curr_par2_t1 + lamb3*agree_curr_par3_t1 # This specifies the measurement model for agree_t1
agree_t2 =~ 1*agree_curr_par1_t2 + lamb2*agree_curr_par2_t2 + lamb3*agree_curr_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
agree_t1 ~~ d_agree_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

agree_curr_par1_t1 ~~ agree_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_curr_par2_t1 ~~ agree_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_curr_par3_t1 ~~ agree_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_curr_par1_t1 ~~ res1*agree_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_curr_par2_t1 ~~ res2*agree_curr_par2_t1   # This allows residual variance on indicator X2 at T1
agree_curr_par3_t1 ~~ res3*agree_curr_par3_t1   # This allows residual variance on indicator X3 at T1

agree_curr_par1_t2 ~~ res1*agree_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_curr_par2_t2 ~~ res2*agree_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_curr_par3_t2 ~~ res3*agree_curr_par3_t2  # This allows residual variance on indicator X3 at T2

agree_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_agree_curr_hyp5 <- lavaan(mi_lcs_agree_curr_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_curr_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 18 3802.655 3871.363 0.996 0.023 0.034
# parameters of interest
params_lcs_agree_curr_hyp5 <- broom::tidy(fit_mi_lcs_agree_curr_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                     "d_agree_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                     "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 0.965 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.520 NA NA
d_agree_1 ~1 0.026 -0.033 0.084 0.128 1.447 0.148
agree_t1 ~1 3.461 3.356 3.567 9.256 107.763 0.000
d_agree_1 ~~ d_agree_1 0.041 -0.011 0.092 1.000 2.592 0.010
agree_t1 ~~ d_agree_1 -0.015 -0.045 0.014 -0.202 -1.691 0.091
d_agree_1 ~~ sa06_01_t1 -0.009 -0.055 0.038 -0.042 -0.605 0.545
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with agreeableness change score (current-personality) is not significantly different from zero, r = -0.042, p = 0.545.

6.5.1.6 Agreeableness - ideal-personality: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_ideal_hyp5 <- '
agree_t1 =~ 1*agree_ideal_par1_t1 + lamb2*agree_ideal_par2_t1 + lamb3*agree_ideal_par3_t1 # This specifies the measurement model for agree_t1 
agree_t2 =~ 1*agree_ideal_par1_t2 + lamb2*agree_ideal_par2_t2 + lamb3*agree_ideal_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
agree_t1 ~~ d_agree_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

agree_ideal_par1_t1 ~~ agree_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_ideal_par2_t1 ~~ agree_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_ideal_par3_t1 ~~ agree_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_ideal_par1_t1 ~~ res1*agree_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_ideal_par2_t1 ~~ res2*agree_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
agree_ideal_par3_t1 ~~ res3*agree_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

agree_ideal_par1_t2 ~~ res1*agree_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_ideal_par2_t2 ~~ res2*agree_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_ideal_par3_t2 ~~ res3*agree_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

agree_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_agree_ideal_hyp5 <- lavaan(mi_lcs_agree_ideal_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_ideal_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 18 3794.484 3863.192 0.99 0.039 0.046
# parameters of interest
params_lcs_agree_ideal_hyp5 <- broom::tidy(fit_mi_lcs_agree_ideal_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.012 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.621 NA NA
d_agree_1 ~1 0.006 -0.066 0.079 0.023 0.291 0.771
agree_t1 ~1 3.778 3.656 3.900 8.441 101.667 0.000
d_agree_1 ~~ d_agree_1 0.076 0.020 0.131 1.000 4.471 0.000
agree_t1 ~~ d_agree_1 -0.040 -0.081 0.001 -0.326 -3.193 0.001
d_agree_1 ~~ sa06_01_t1 0.000 -0.068 0.067 -0.001 -0.020 0.984
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with agreeableness change score (ideal-personality) is not significantly different from zero, r = -0.001, p = 0.984.

6.5.1.7 Agreeableness - current-personality: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_curr_specif_hyp5 <- '
agree_t1 =~ 1*agree_curr_par1_t1 + lamb2*agree_curr_par2_t1 + lamb3*agree_curr_par3_t1 # This specifies the measurement model for agree_t1
agree_t2 =~ 1*agree_curr_par1_t2 + lamb2*agree_curr_par2_t2 + lamb3*agree_curr_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

goals =~ 1*sa07_04_t1 + sa07_05_t1 + sa07_06_t1 # latent acceptance goal variable (three facets per trait)

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
agree_t1 ~~ d_agree_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

agree_curr_par1_t1 ~~ agree_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_curr_par2_t1 ~~ agree_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_curr_par3_t1 ~~ agree_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_curr_par1_t1 ~~ res1*agree_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_curr_par2_t1 ~~ res2*agree_curr_par2_t1   # This allows residual variance on indicator X2 at T1
agree_curr_par3_t1 ~~ res3*agree_curr_par3_t1   # This allows residual variance on indicator X3 at T1

agree_curr_par1_t2 ~~ res1*agree_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_curr_par2_t2 ~~ res2*agree_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_curr_par3_t2 ~~ res3*agree_curr_par3_t2  # This allows residual variance on indicator X3 at T2

agree_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_04_t1 ~~ sa07_04_t1
sa07_05_t1 ~~ sa07_05_t1
sa07_06_t1 ~~ sa07_06_t1

sa07_04_t1 ~ 1
sa07_05_t1 ~ 1
sa07_06_t1 ~ 1
'
fit_mi_lcs_agree_curr_specif_hyp5 <- lavaan(mi_lcs_agree_curr_specif_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_curr_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 25 5420.421 5515.849 0.967 0.061 0.084
# parameters of interest
params_lcs_agree_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_agree_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "goals ~~ d_agree_1", "goals ~~ goals", # acceptance goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.000 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.563 NA NA
d_agree_1 ~1 0.024 -0.034 0.081 0.115 1.363 0.173
agree_t1 ~1 3.462 3.356 3.567 9.401 107.744 0.000
d_agree_1 ~~ d_agree_1 0.043 -0.012 0.097 1.000 2.595 0.009
agree_t1 ~~ d_agree_1 -0.021 -0.053 0.010 -0.281 -2.230 0.026
goals ~~ d_agree_1 -0.041 -0.098 0.016 -0.296 -2.392 0.017
goals ~~ goals 0.453 0.215 0.691 1.000 6.262 0.000

Correlation of specific, facet-level acceptance goals with agreeableness change score (current-personality) is significantly different from zero, r = -0.296, p = 0.017.

6.5.1.8 Agreeableness - ideal-personality: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_ideal_specif_hyp5 <- '
agree_t1 =~ 1*agree_ideal_par1_t1 + lamb2*agree_ideal_par2_t1 + lamb3*agree_ideal_par3_t1 # This specifies the measurement model for agree_t1 
agree_t2 =~ 1*agree_ideal_par1_t2 + lamb2*agree_ideal_par2_t2 + lamb3*agree_ideal_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

goals =~ 1*sa07_04_t1 + sa07_05_t1 + sa07_06_t1 # latent acceptance goal variable (three facets per trait)

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
agree_t1 ~~ d_agree_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

agree_ideal_par1_t1 ~~ agree_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_ideal_par2_t1 ~~ agree_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_ideal_par3_t1 ~~ agree_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_ideal_par1_t1 ~~ res1*agree_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_ideal_par2_t1 ~~ res2*agree_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
agree_ideal_par3_t1 ~~ res3*agree_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

agree_ideal_par1_t2 ~~ res1*agree_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_ideal_par2_t2 ~~ res2*agree_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_ideal_par3_t2 ~~ res3*agree_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

agree_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_04_t1 ~~ sa07_04_t1
sa07_05_t1 ~~ sa07_05_t1
sa07_06_t1 ~~ sa07_06_t1

sa07_04_t1 ~ 1
sa07_05_t1 ~ 1
sa07_06_t1 ~ 1
'
fit_mi_lcs_agree_ideal_specif_hyp5 <- lavaan(mi_lcs_agree_ideal_specif_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_ideal_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 25 5423.04 5518.467 0.987 0.04 0.052
# parameters of interest
params_lcs_agree_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_agree_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "goals ~~ d_agree_1", "goals ~~ goals", # acceptance goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.018 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.630 NA NA
d_agree_1 ~1 0.006 -0.067 0.078 0.021 0.259 0.795
agree_t1 ~1 3.778 3.656 3.900 8.461 101.680 0.000
d_agree_1 ~~ d_agree_1 0.076 0.020 0.133 1.000 4.455 0.000
agree_t1 ~~ d_agree_1 -0.042 -0.084 0.000 -0.337 -3.253 0.001
goals ~~ d_agree_1 -0.017 -0.069 0.035 -0.094 -1.087 0.277
goals ~~ goals 0.435 0.171 0.700 1.000 5.417 0.000

Correlation of specific, facet-level acceptance goals with agreeableness change score (ideal-personality) is not significantly different from zero, r = -0.094, p = 0.277.

6.5.1.9 Conscientiousness - current-personality: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_curr_hyp5 <- '
consc_t1 =~ 1*consc_curr_par1_t1 + lamb2*consc_curr_par2_t1 + lamb3*consc_curr_par3_t1 # This specifies the measurement model for consc_t1 
consc_t2 =~ 1*consc_curr_par1_t2 + lamb2*consc_curr_par2_t2 + lamb3*consc_curr_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

consc_curr_par1_t1 ~~ consc_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_curr_par2_t1 ~~ consc_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_curr_par3_t1 ~~ consc_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_curr_par1_t1 ~~ res1*consc_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_curr_par2_t1 ~~ res2*consc_curr_par2_t1   # This allows residual variance on indicator X2 at T1
consc_curr_par3_t1 ~~ res3*consc_curr_par3_t1   # This allows residual variance on indicator X3 at T1

consc_curr_par1_t2 ~~ res1*consc_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_curr_par2_t2 ~~ res2*consc_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_curr_par3_t2 ~~ res3*consc_curr_par3_t2  # This allows residual variance on indicator X3 at T2

consc_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_consc_curr_hyp5 <- lavaan(mi_lcs_consc_curr_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_curr_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 18 4049.235 4117.943 0.997 0.026 0.032
# parameters of interest
params_lcs_consc_curr_hyp5 <- broom::tidy(fit_mi_lcs_consc_curr_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                     "d_consc_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                     "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 0.986 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.514 NA NA
d_consc_1 ~1 0.074 -0.010 0.159 0.213 2.884 0.004
consc_t1 ~1 3.380 3.244 3.516 5.058 81.598 0.000
d_consc_1 ~~ d_consc_1 0.121 0.053 0.190 1.000 5.857 0.000
consc_t1 ~~ d_consc_1 -0.054 -0.110 0.001 -0.234 -3.243 0.001
d_consc_1 ~~ sa06_01_t1 -0.035 -0.116 0.046 -0.101 -1.418 0.156
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with conscientiousness change score (current-personality) is not significantly different from zero, r = -0.101, p = 0.156.

6.5.1.10 Conscientiousness - ideal-personality: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_ideal_hyp5 <- '
consc_t1 =~ 1*consc_ideal_par1_t1 + lamb2*consc_ideal_par2_t1 + lamb3*consc_ideal_par3_t1 # This specifies the measurement model for consc_t1
consc_t2 =~ 1*consc_ideal_par1_t2 + lamb2*consc_ideal_par2_t2 + lamb3*consc_ideal_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

consc_ideal_par1_t1 ~~ consc_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_ideal_par2_t1 ~~ consc_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_ideal_par3_t1 ~~ consc_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_ideal_par1_t1 ~~ res1*consc_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_ideal_par2_t1 ~~ res2*consc_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
consc_ideal_par3_t1 ~~ res3*consc_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

consc_ideal_par1_t2 ~~ res1*consc_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_ideal_par2_t2 ~~ res2*consc_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_ideal_par3_t2 ~~ res3*consc_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

consc_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_consc_ideal_hyp5 <- lavaan(mi_lcs_consc_ideal_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_ideal_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 18 3374.4 3443.108 0.994 0.031 0.041
# parameters of interest
params_lcs_consc_ideal_hyp5 <- broom::tidy(fit_mi_lcs_consc_ideal_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.036 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.744 NA NA
d_consc_1 ~1 0.027 -0.049 0.104 0.086 1.164 0.244
consc_t1 ~1 4.339 4.238 4.440 9.869 141.201 0.000
d_consc_1 ~~ d_consc_1 0.100 0.031 0.169 1.000 4.754 0.000
consc_t1 ~~ d_consc_1 -0.056 -0.104 -0.009 -0.407 -3.874 0.000
d_consc_1 ~~ sa06_01_t1 0.019 -0.041 0.078 0.060 1.044 0.297
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with conscientiousness change score (ideal-personality) is not significantly different from zero, r = 0.06, p = 0.297.

6.5.1.11 Conscientiousness - current-personality: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_curr_specif_hyp5 <- '
consc_t1 =~ 1*consc_curr_par1_t1 + lamb2*consc_curr_par2_t1 + lamb3*consc_curr_par3_t1 # This specifies the measurement model for consc_t1 
consc_t2 =~ 1*consc_curr_par1_t2 + lamb2*consc_curr_par2_t2 + lamb3*consc_curr_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

goals =~ 1*sa07_07_t1 + sa07_08_t1 + sa07_09_t1 # latent acceptance goal variable (three facets per trait)

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

consc_curr_par1_t1 ~~ consc_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_curr_par2_t1 ~~ consc_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_curr_par3_t1 ~~ consc_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_curr_par1_t1 ~~ res1*consc_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_curr_par2_t1 ~~ res2*consc_curr_par2_t1   # This allows residual variance on indicator X2 at T1
consc_curr_par3_t1 ~~ res3*consc_curr_par3_t1   # This allows residual variance on indicator X3 at T1

consc_curr_par1_t2 ~~ res1*consc_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_curr_par2_t2 ~~ res2*consc_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_curr_par3_t2 ~~ res3*consc_curr_par3_t2  # This allows residual variance on indicator X3 at T2

consc_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_07_t1 ~~ sa07_07_t1
sa07_08_t1 ~~ sa07_08_t1
sa07_09_t1 ~~ sa07_09_t1

sa07_07_t1 ~ 1
sa07_08_t1 ~ 1
sa07_09_t1 ~ 1
'
fit_mi_lcs_consc_curr_specif_hyp5 <- lavaan(mi_lcs_consc_curr_specif_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_curr_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 25 5674.857 5770.285 0.921 0.125 0.214
# parameters of interest
params_lcs_consc_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_consc_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "goals ~~ d_consc_1", "goals ~~ goals", # acceptance goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.018 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.548 NA NA
d_consc_1 ~1 0.074 -0.011 0.158 0.205 2.867 0.004
consc_t1 ~1 3.380 3.244 3.516 5.051 81.584 0.000
d_consc_1 ~~ d_consc_1 0.130 0.057 0.202 1.000 5.911 0.000
consc_t1 ~~ d_consc_1 -0.073 -0.141 -0.004 -0.301 -3.503 0.000
goals ~~ d_consc_1 -0.043 -0.125 0.040 -0.159 -1.707 0.088
goals ~~ goals 0.555 0.313 0.796 1.000 7.563 0.000

The correlation of specific, facet-level acceptance goals with the conscientiousness change score (current-personality) is not significantly different from zero, r = -0.159, p = 0.088.

6.5.1.12 Conscientiousness - ideal-personality: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_ideal_specif_hyp5 <- '
consc_t1 =~ 1*consc_ideal_par1_t1 + lamb2*consc_ideal_par2_t1 + lamb3*consc_ideal_par3_t1 # This specifies the measurement model for consc_t1
consc_t2 =~ 1*consc_ideal_par1_t2 + lamb2*consc_ideal_par2_t2 + lamb3*consc_ideal_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

goals =~ 1*sa07_07_t1 + sa07_08_t1 + sa07_09_t1 # latent acceptance goal variable (three facets per trait)

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

consc_ideal_par1_t1 ~~ consc_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_ideal_par2_t1 ~~ consc_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_ideal_par3_t1 ~~ consc_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_ideal_par1_t1 ~~ res1*consc_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_ideal_par2_t1 ~~ res2*consc_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
consc_ideal_par3_t1 ~~ res3*consc_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

consc_ideal_par1_t2 ~~ res1*consc_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_ideal_par2_t2 ~~ res2*consc_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_ideal_par3_t2 ~~ res3*consc_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

consc_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_07_t1 ~~ sa07_07_t1
sa07_08_t1 ~~ sa07_08_t1
sa07_09_t1 ~~ sa07_09_t1

sa07_07_t1 ~ 1
sa07_08_t1 ~ 1
sa07_09_t1 ~ 1
'
fit_mi_lcs_consc_ideal_specif_hyp5 <- lavaan(mi_lcs_consc_ideal_specif_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_ideal_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 25 4997.976 5093.404 1 0 0.032
# parameters of interest
params_lcs_consc_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_consc_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "goals ~~ d_consc_1", "goals ~~ goals", # acceptance goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.037 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.744 NA NA
d_consc_1 ~1 0.026 -0.051 0.103 0.081 1.097 0.273
consc_t1 ~1 4.339 4.238 4.440 9.859 141.196 0.000
d_consc_1 ~~ d_consc_1 0.100 0.030 0.169 1.000 4.716 0.000
consc_t1 ~~ d_consc_1 -0.057 -0.105 -0.009 -0.407 -3.878 0.000
goals ~~ d_consc_1 -0.035 -0.090 0.021 -0.148 -2.036 0.042
goals ~~ goals 0.547 0.306 0.788 1.000 7.475 0.000

The correlation of specific, facet-level acceptance goals with the conscientiousness change score (ideal-personality) is (barely) significantly different from zero, r = -0.148, p = 0.042.

6.5.1.13 Neuroticism - current-personality: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_curr_hyp5 <- '
neuro_t1 =~ 1*neuro_curr_par1_t1 + lamb2*neuro_curr_par2_t1 + lamb3*neuro_curr_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_curr_par1_t2 + lamb2*neuro_curr_par2_t2 + lamb3*neuro_curr_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

neuro_curr_par1_t1 ~~ neuro_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_curr_par2_t1 ~~ neuro_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_curr_par3_t1 ~~ neuro_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_curr_par1_t1 ~~ res1*neuro_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_curr_par2_t1 ~~ res2*neuro_curr_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_curr_par3_t1 ~~ res3*neuro_curr_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_curr_par1_t2 ~~ res1*neuro_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_curr_par2_t2 ~~ res2*neuro_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_curr_par3_t2 ~~ res3*neuro_curr_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_neuro_curr_hyp5 <- lavaan(mi_lcs_neuro_curr_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_curr_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 18 4258.931 4327.639 0.996 0.033 0.077
# parameters of interest
params_lcs_neuro_curr_hyp5 <- broom::tidy(fit_mi_lcs_neuro_curr_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                     "d_neuro_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                     "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.985 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.458 NA NA
d_neuro_1 ~1 -0.177 -0.269 -0.085 -0.476 -6.305 0.000
neuro_t1 ~1 3.250 3.095 3.405 4.068 68.935 0.000
d_neuro_1 ~~ d_neuro_1 0.138 0.061 0.215 1.000 5.915 0.000
neuro_t1 ~~ d_neuro_1 -0.059 -0.129 0.010 -0.199 -2.802 0.005
d_neuro_1 ~~ sa06_01_t1 -0.026 -0.105 0.053 -0.070 -1.082 0.279
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with neuroticism change score (current-personality) is not significantly different from zero, r = -0.07, p = 0.279.

6.5.1.14 Neuroticism - ideal-personality: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_ideal_hyp5 <- '
neuro_t1 =~ 1*neuro_ideal_par1_t1 + lamb2*neuro_ideal_par2_t1 + lamb3*neuro_ideal_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_ideal_par1_t2 + lamb2*neuro_ideal_par2_t2 + lamb3*neuro_ideal_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_ideal_par1_t1 ~~ res1*neuro_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_ideal_par2_t1 ~~ res2*neuro_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_ideal_par3_t1 ~~ res3*neuro_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_ideal_par1_t2 ~~ res1*neuro_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_ideal_par2_t2 ~~ res2*neuro_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_ideal_par3_t2 ~~ res3*neuro_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_neuro_ideal_hyp5 <- lavaan(mi_lcs_neuro_ideal_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_ideal_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 18 3588.731 3657.439 0.987 0.042 0.06
# parameters of interest
params_lcs_neuro_ideal_hyp5 <- broom::tidy(fit_mi_lcs_neuro_ideal_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.071 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.705 NA NA
d_neuro_1 ~1 -0.007 -0.100 0.087 -0.019 -0.232 0.817
neuro_t1 ~1 1.751 1.640 1.863 3.285 51.768 0.000
d_neuro_1 ~~ d_neuro_1 0.123 0.024 0.222 1.000 4.091 0.000
neuro_t1 ~~ d_neuro_1 -0.080 -0.159 -0.001 -0.427 -3.334 0.001
d_neuro_1 ~~ sa06_01_t1 -0.018 -0.103 0.068 -0.050 -0.681 0.496
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with neuroticism change score (ideal-personality) is not significantly different from zero, r = -0.05, p = 0.496.

6.5.1.15 Neuroticism - current-personality: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_curr_specif_hyp5 <- '
neuro_t1 =~ 1*neuro_curr_par1_t1 + lamb2*neuro_curr_par2_t1 + lamb3*neuro_curr_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_curr_par1_t2 + lamb2*neuro_curr_par2_t2 + lamb3*neuro_curr_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

goals =~ 1*sa07_10_t1 + sa07_11_t1 + sa07_12_t1 # latent acceptance goal variable (three facets per trait)

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

neuro_curr_par1_t1 ~~ neuro_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_curr_par2_t1 ~~ neuro_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_curr_par3_t1 ~~ neuro_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_curr_par1_t1 ~~ res1*neuro_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_curr_par2_t1 ~~ res2*neuro_curr_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_curr_par3_t1 ~~ res3*neuro_curr_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_curr_par1_t2 ~~ res1*neuro_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_curr_par2_t2 ~~ res2*neuro_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_curr_par3_t2 ~~ res3*neuro_curr_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_10_t1 ~~ sa07_10_t1
sa07_11_t1 ~~ sa07_11_t1
sa07_12_t1 ~~ sa07_12_t1

sa07_10_t1 ~ 1
sa07_11_t1 ~ 1
sa07_12_t1 ~ 1
'
fit_mi_lcs_neuro_curr_specif_hyp5 <- lavaan(mi_lcs_neuro_curr_specif_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_curr_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 25 5909.586 6005.014 0.955 0.097 0.184
# parameters of interest
params_lcs_neuro_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_neuro_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "goals ~~ d_neuro_1", "goals ~~ goals", # acceptance goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.021 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.492 NA NA
d_neuro_1 ~1 -0.177 -0.269 -0.086 -0.461 -6.358 0.000
neuro_t1 ~1 3.250 3.095 3.405 4.069 68.935 0.000
d_neuro_1 ~~ d_neuro_1 0.148 0.065 0.231 1.000 5.846 0.000
neuro_t1 ~~ d_neuro_1 -0.087 -0.167 -0.007 -0.283 -3.567 0.000
goals ~~ d_neuro_1 0.045 -0.025 0.116 0.178 2.121 0.034
goals ~~ goals 0.439 0.189 0.690 1.000 5.774 0.000

Correlation of specific, facet-level acceptance goals with neuroticism change score (current-personality) is (barely) significantly different from zero, r = 0.178, p = 0.034.

6.5.1.16 Neuroticism - ideal-personality: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_ideal_specif_hyp5 <- '
neuro_t1 =~ 1*neuro_ideal_par1_t1 + lamb2*neuro_ideal_par2_t1 + lamb3*neuro_ideal_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_ideal_par1_t2 + lamb2*neuro_ideal_par2_t2 + lamb3*neuro_ideal_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

goals =~ 1*sa07_10_t1 + sa07_11_t1 + sa07_12_t1 # latent acceptance goal variable (three facets per trait)

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_ideal_par1_t1 ~~ res1*neuro_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_ideal_par2_t1 ~~ res2*neuro_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_ideal_par3_t1 ~~ res3*neuro_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_ideal_par1_t2 ~~ res1*neuro_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_ideal_par2_t2 ~~ res2*neuro_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_ideal_par3_t2 ~~ res3*neuro_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_10_t1 ~~ sa07_10_t1
sa07_11_t1 ~~ sa07_11_t1
sa07_12_t1 ~~ sa07_12_t1

sa07_10_t1 ~ 1
sa07_11_t1 ~ 1
sa07_12_t1 ~ 1
'
fit_mi_lcs_neuro_ideal_specif_hyp5 <- lavaan(mi_lcs_neuro_ideal_specif_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_ideal_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 25 5243.659 5339.087 0.99 0.033 0.051
# parameters of interest
params_lcs_neuro_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_neuro_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "goals ~~ d_neuro_1", "goals ~~ goals", # acceptance goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.066 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.699 NA NA
d_neuro_1 ~1 -0.006 -0.100 0.087 -0.018 -0.227 0.820
neuro_t1 ~1 1.751 1.640 1.863 3.282 51.764 0.000
d_neuro_1 ~~ d_neuro_1 0.122 0.023 0.222 1.000 4.046 0.000
neuro_t1 ~~ d_neuro_1 -0.078 -0.157 0.001 -0.420 -3.255 0.001
goals ~~ d_neuro_1 0.002 -0.054 0.058 0.009 0.116 0.908
goals ~~ goals 0.443 0.189 0.697 1.000 5.732 0.000

The correlation of specific, facet-level acceptance goals with the neuroticism change score (ideal-personality) is not significantly different from zero, r = 0.009, p = 0.908.

6.5.1.17 Openness - current-personality: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_curr_hyp5 <- '
openn_t1 =~ 1*openn_curr_par1_t1 + lamb2*openn_curr_par2_t1 + lamb3*openn_curr_par3_t1 # This specifies the measurement model for openn_t1
openn_t2 =~ 1*openn_curr_par1_t2 + lamb2*openn_curr_par2_t2 + lamb3*openn_curr_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

openn_curr_par1_t1 ~~ openn_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_curr_par2_t1 ~~ openn_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_curr_par3_t1 ~~ openn_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_curr_par1_t1 ~~ res1*openn_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_curr_par2_t1 ~~ res2*openn_curr_par2_t1   # This allows residual variance on indicator X2 at T1
openn_curr_par3_t1 ~~ res3*openn_curr_par3_t1   # This allows residual variance on indicator X3 at T1

openn_curr_par1_t2 ~~ res1*openn_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_curr_par2_t2 ~~ res2*openn_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_curr_par3_t2 ~~ res3*openn_curr_par3_t2  # This allows residual variance on indicator X3 at T2

openn_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_openn_curr_hyp5 <- lavaan(mi_lcs_openn_curr_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_openn_curr_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 18 3956.354 4025.062 1 0 0.031
# parameters of interest
params_lcs_openn_curr_hyp5 <- broom::tidy(fit_mi_lcs_openn_curr_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                     "d_openn_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                     "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.018 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.405 NA NA
d_openn_1 ~1 0.076 0.003 0.149 0.318 3.442 0.001
openn_t1 ~1 3.564 3.438 3.690 5.935 93.254 0.000
d_openn_1 ~~ d_openn_1 0.057 0.004 0.110 1.000 3.544 0.000
openn_t1 ~~ d_openn_1 -0.035 -0.077 0.007 -0.244 -2.727 0.006
d_openn_1 ~~ sa06_01_t1 -0.016 -0.080 0.049 -0.065 -0.794 0.427
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with openness change score (current-personality) is not significantly different from zero, r = -0.065, p = 0.427.

6.5.1.18 Openness - ideal-personality: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_ideal_hyp5 <- '
openn_t1 =~ 1*openn_ideal_par1_t1 + lamb2*openn_ideal_par2_t1 + lamb3*openn_ideal_par3_t1 # This specifies the measurement model for openn_t1 
openn_t2 =~ 1*openn_ideal_par1_t2 + lamb2*openn_ideal_par2_t2 + lamb3*openn_ideal_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

openn_ideal_par1_t1 ~~ openn_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_ideal_par2_t1 ~~ openn_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_ideal_par3_t1 ~~ openn_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_ideal_par1_t1 ~~ res1*openn_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_ideal_par2_t1 ~~ res2*openn_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
openn_ideal_par3_t1 ~~ res3*openn_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

openn_ideal_par1_t2 ~~ res1*openn_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_ideal_par2_t2 ~~ res2*openn_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_ideal_par3_t2 ~~ res3*openn_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

openn_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_openn_ideal_hyp5 <- lavaan(mi_lcs_openn_ideal_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing="fiml")
summary(fit_mi_lcs_openn_ideal_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 18 3857.64 3926.348 0.968 0.063 0.063
# parameters of interest
params_lcs_openn_ideal_hyp5 <- broom::tidy(fit_mi_lcs_openn_ideal_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.033 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.711 NA NA
d_openn_1 ~1 0.015 -0.040 0.069 0.070 0.895 0.371
openn_t1 ~1 3.907 3.808 4.006 12.679 130.315 0.000
d_openn_1 ~~ d_openn_1 0.045 0.002 0.088 1.000 3.437 0.001
openn_t1 ~~ d_openn_1 -0.025 -0.055 0.004 -0.390 -2.858 0.004
d_openn_1 ~~ sa06_01_t1 -0.028 -0.075 0.019 -0.132 -1.941 0.052
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with openness change score (ideal-personality) is not significantly different from zero, r = -0.132, p = 0.052.

6.5.1.19 Openness - current-personality: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_curr_specif_hyp5 <- '
openn_t1 =~ 1*openn_curr_par1_t1 + lamb2*openn_curr_par2_t1 + lamb3*openn_curr_par3_t1 # This specifies the measurement model for openn_t1
openn_t2 =~ 1*openn_curr_par1_t2 + lamb2*openn_curr_par2_t2 + lamb3*openn_curr_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

goals =~ 1*sa07_13_t1 + sa07_14_t1 + sa07_15_t1 # latent acceptance goal variable (three facets per trait)

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

openn_curr_par1_t1 ~~ openn_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_curr_par2_t1 ~~ openn_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_curr_par3_t1 ~~ openn_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_curr_par1_t1 ~~ res1*openn_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_curr_par2_t1 ~~ res2*openn_curr_par2_t1   # This allows residual variance on indicator X2 at T1
openn_curr_par3_t1 ~~ res3*openn_curr_par3_t1   # This allows residual variance on indicator X3 at T1

openn_curr_par1_t2 ~~ res1*openn_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_curr_par2_t2 ~~ res2*openn_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_curr_par3_t2 ~~ res3*openn_curr_par3_t2  # This allows residual variance on indicator X3 at T2

openn_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_13_t1 ~~ sa07_13_t1
sa07_14_t1 ~~ sa07_14_t1
sa07_15_t1 ~~ sa07_15_t1

sa07_13_t1 ~ 1
sa07_14_t1 ~ 1
sa07_15_t1 ~ 1
'
fit_mi_lcs_openn_curr_specif_hyp5 <- lavaan(mi_lcs_openn_curr_specif_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')

summary(fit_mi_lcs_openn_curr_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 25 5429.067 5524.495 0.95 0.096 0.185
# parameters of interest
params_lcs_openn_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_openn_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "goals ~~ d_openn_1", "goals ~~ goals", # acceptance goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.042 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.428 NA NA
d_openn_1 ~1 0.076 0.003 0.148 0.307 3.429 0.001
openn_t1 ~1 3.564 3.439 3.690 5.937 93.257 0.000
d_openn_1 ~~ d_openn_1 0.061 0.005 0.117 1.000 3.556 0.000
openn_t1 ~~ d_openn_1 -0.045 -0.095 0.006 -0.301 -2.892 0.004
goals ~~ d_openn_1 -0.018 -0.073 0.037 -0.126 -1.099 0.272
goals ~~ goals 0.346 0.137 0.556 1.000 5.436 0.000

Correlation of specific, facet-level acceptance goals with openness change score (current-personality) is not significantly different from zero, r = -0.126, p = 0.272.

6.5.1.20 Openness - ideal-personality: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_ideal_specif_hyp5 <- '
openn_t1 =~ 1*openn_ideal_par1_t1 + lamb2*openn_ideal_par2_t1 + lamb3*openn_ideal_par3_t1 # This specifies the measurement model for openn_t1 
openn_t2 =~ 1*openn_ideal_par1_t2 + lamb2*openn_ideal_par2_t2 + lamb3*openn_ideal_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

goals =~ 1*sa07_13_t1 + sa07_14_t1 + sa07_15_t1 # latent acceptance goal variable (three facets per trait)

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

openn_ideal_par1_t1 ~~ openn_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_ideal_par2_t1 ~~ openn_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_ideal_par3_t1 ~~ openn_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_ideal_par1_t1 ~~ res1*openn_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_ideal_par2_t1 ~~ res2*openn_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
openn_ideal_par3_t1 ~~ res3*openn_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

openn_ideal_par1_t2 ~~ res1*openn_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_ideal_par2_t2 ~~ res2*openn_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_ideal_par3_t2 ~~ res3*openn_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

openn_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_13_t1 ~~ sa07_13_t1
sa07_14_t1 ~~ sa07_14_t1
sa07_15_t1 ~~ sa07_15_t1

sa07_13_t1 ~ 1
sa07_14_t1 ~ 1
sa07_15_t1 ~ 1
'
fit_mi_lcs_openn_ideal_specif_hyp5 <- lavaan(mi_lcs_openn_ideal_specif_hyp5, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing = "fiml")
summary(fit_mi_lcs_openn_ideal_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 25 5331.326 5426.754 0.96 0.069 0.107
# parameters of interest
params_lcs_openn_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_openn_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "goals ~~ d_openn_1", "goals ~~ goals", # acceptance goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.069 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.769 NA NA
d_openn_1 ~1 0.015 -0.040 0.069 0.066 0.886 0.376
openn_t1 ~1 3.907 3.808 4.006 12.792 130.356 0.000
d_openn_1 ~~ d_openn_1 0.048 0.002 0.095 1.000 3.432 0.001
openn_t1 ~~ d_openn_1 -0.030 -0.062 0.002 -0.447 -3.118 0.002
goals ~~ d_openn_1 -0.018 -0.047 0.010 -0.140 -2.101 0.036
goals ~~ goals 0.347 0.138 0.556 1.000 5.454 0.000

The correlation of specific, facet-level acceptance goals with the openness change score (ideal-personality) is (barely) significantly different from zero, r = -0.14, p = 0.036.

6.5.2 Big Five facets

Run models for all facets with a template & loop:

Show the code
# create template:
facet_template <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1       # This estimates the variance of facet_t1 
facet_t1 ~~ d_facet_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_facet_1 ~~ ind_goal     # estimates the covariance/correlation with acceptance goal variable

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ind_goal ~~ ind_goal
ind_goal ~ 1
'

# loop across 15 facets
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # loop across 2 BFI versions (combined pre&post current/ideal)
  for (j in 5:length(bfi_versions)) {
    items = paste0(bfi_versions[[j]], item_nrs)
    # loop across 2 different goal operationalizations (sa06_01_t1 & sa07_XX_t1)
    for (k in 1:2) {
      if (k==1) {
        goal_op = "sa06_01_t1"
      } else{
        goal_op = paste0("sa07_", str_pad(i-5, 2, pad = "0"), "_t1")
      }
      template_filled <- str_replace_all(facet_template, 
                                         c("facet" = short_name,
                                           "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                           "ind_goal" = goal_op))
      facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
      # save to environment
      if (k==1) {
        eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_hyp5")), template_filled))
        eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_hyp5")), facet_model_fit))
      } else{
        eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_specif_hyp5")), template_filled))
        eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_specif_hyp5")), facet_model_fit))
      }
    }
  }
}  
6.5.2.1 Sociability - current-personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7800.447 7884.424 0.953 0.078 0.05
# parameters of interest
params_lcs_socia_curr_hyp5 <- broom::tidy(fit_mi_lcs_socia_curr_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.073 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.475 NA NA
d_socia_1 ~1 0.162 0.022 0.302 0.372 3.798 0.000
socia_t1 ~1 2.858 2.633 3.083 2.912 41.737 0.000
d_socia_1 ~~ d_socia_1 0.189 0.041 0.337 1.000 4.199 0.000
socia_t1 ~~ d_socia_1 -0.157 -0.285 -0.030 -0.369 -4.078 0.000
d_socia_1 ~~ sa06_01_t1 0.036 -0.099 0.171 0.083 0.879 0.379
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

The correlation of the general acceptance goal with the sociability change score (current-personality) is not significantly different from zero, r = 0.083, p = 0.379.

6.5.2.2 Sociability - ideal-personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7864.423 7948.4 0.88 0.064 0.071
# parameters of interest
params_lcs_socia_ideal_hyp5 <- broom::tidy(fit_mi_lcs_socia_ideal_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 0.888 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.475 NA NA
d_socia_1 ~1 -0.061 -0.162 0.039 -0.330 -2.009 0.044
socia_t1 ~1 4.226 4.090 4.361 12.175 102.770 0.000
d_socia_1 ~~ d_socia_1 0.034 -0.059 0.128 1.000 1.215 0.224
socia_t1 ~~ d_socia_1 -0.001 -0.055 0.053 -0.015 -0.061 0.951
d_socia_1 ~~ sa06_01_t1 -0.022 -0.119 0.075 -0.118 -0.742 0.458
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with sociability change score (ideal-personality) is not significantly different from zero, r = -0.118, p = 0.458.

6.5.2.3 Sociability - current-personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7799.893 7883.87 0.907 0.112 0.136
# parameters of interest
params_lcs_socia_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_socia_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~~ sa07_01_t1", "sa07_01_t1 ~~ sa07_01_t1", # acceptance goals
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.099 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.505 NA NA
d_socia_1 ~1 0.160 0.020 0.299 0.355 3.774 0.000
socia_t1 ~1 2.858 2.633 3.084 2.919 41.771 0.000
d_socia_1 ~~ d_socia_1 0.202 0.044 0.360 1.000 4.217 0.000
socia_t1 ~~ d_socia_1 -0.184 -0.325 -0.042 -0.417 -4.278 0.000
d_socia_1 ~~ sa07_01_t1 -0.049 -0.173 0.076 -0.108 -1.284 0.199
sa07_01_t1 ~~ sa07_01_t1 0.997 0.821 1.173 1.000 18.622 0.000

Correlation of specific, facet-level acceptance goals with sociability change score (current-personality) is not significantly different from zero, r = -0.108, p = 0.199.

6.5.2.4 Sociability - ideal-personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7861.727 7945.704 0.922 0.051 0.06
# parameters of interest
params_lcs_socia_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_socia_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~~ sa07_01_t1", "sa07_01_t1 ~~ sa07_01_t1", # acceptance goals
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 0.888 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.468 NA NA
d_socia_1 ~1 -0.060 -0.158 0.039 -0.328 -1.991 0.046
socia_t1 ~1 4.225 4.090 4.360 12.225 102.942 0.000
d_socia_1 ~~ d_socia_1 0.033 -0.058 0.125 1.000 1.192 0.233
socia_t1 ~~ d_socia_1 -0.001 -0.052 0.051 -0.010 -0.041 0.967
d_socia_1 ~~ sa07_01_t1 -0.043 -0.126 0.039 -0.239 -1.742 0.082
sa07_01_t1 ~~ sa07_01_t1 0.997 0.821 1.173 1.000 18.622 0.000

Correlation of specific, facet-level acceptance goals with anxiety change score (ideal-personality) is not significantly different from zero, r = -0.239, p = 0.082.

6.5.2.5 Assertiveness - current-personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7913.978 7997.955 0.992 0.028 0.035
# parameters of interest
params_lcs_asser_curr_hyp5 <- broom::tidy(fit_mi_lcs_asser_curr_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.996 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.373 NA NA
d_asser_1 ~1 0.053 -0.042 0.149 0.204 1.849 0.065
asser_t1 ~1 3.105 2.906 3.305 4.442 51.156 0.000
d_asser_1 ~~ d_asser_1 0.069 -0.014 0.151 1.000 2.727 0.006
asser_t1 ~~ d_asser_1 -0.033 -0.101 0.036 -0.178 -1.563 0.118
d_asser_1 ~~ sa06_01_t1 -0.011 -0.087 0.065 -0.040 -0.457 0.648
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with assertiveness change score (current-personality) is not significantly different from zero, r = -0.04, p = 0.648.

6.5.2.6 Assertiveness - ideal-personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7794.173 7878.15 0.972 0.033 0.057
# parameters of interest
params_lcs_asser_ideal_hyp5 <- broom::tidy(fit_mi_lcs_asser_ideal_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.935 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.435 NA NA
d_asser_1 ~1 -0.024 -0.106 0.057 -0.148 -0.992 0.321
asser_t1 ~1 4.134 3.982 4.286 11.645 89.478 0.000
d_asser_1 ~~ d_asser_1 0.027 -0.040 0.094 1.000 1.340 0.180
asser_t1 ~~ d_asser_1 -0.005 -0.053 0.044 -0.077 -0.308 0.758
d_asser_1 ~~ sa06_01_t1 0.040 -0.032 0.111 0.239 1.826 0.068
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with assertiveness change score (ideal-personality) is not significantly different from zero, r = 0.239, p = 0.068.

6.5.2.7 Assertiveness - current-personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7914.109 7998.086 0.958 0.063 0.087
# parameters of interest
params_lcs_asser_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_asser_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~~ sa07_02_t1", "sa07_02_t1 ~~ sa07_02_t1", # acceptance goals
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.998 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.374 NA NA
d_asser_1 ~1 0.054 -0.041 0.148 0.204 1.864 0.062
asser_t1 ~1 3.105 2.906 3.305 4.433 51.158 0.000
d_asser_1 ~~ d_asser_1 0.069 -0.015 0.153 1.000 2.713 0.007
asser_t1 ~~ d_asser_1 -0.033 -0.105 0.038 -0.182 -1.537 0.124
d_asser_1 ~~ sa07_02_t1 -0.005 -0.096 0.087 -0.017 -0.164 0.870
sa07_02_t1 ~~ sa07_02_t1 0.997 0.831 1.163 1.000 19.717 0.000

Correlation of specific, facet-level acceptance goals with assertiveness change score (current-personality) is not significantly different from zero, r = -0.017, p = 0.87.

6.5.2.8 Assertiveness - ideal-personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7793.151 7877.128 1 0 0.045
# parameters of interest
params_lcs_asser_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_asser_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~~ sa07_02_t1", "sa07_02_t1 ~~ sa07_02_t1", # acceptance goals
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.930 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.436 NA NA
d_asser_1 ~1 -0.025 -0.106 0.055 -0.151 -1.031 0.303
asser_t1 ~1 4.134 3.982 4.286 11.625 89.537 0.000
d_asser_1 ~~ d_asser_1 0.028 -0.039 0.095 1.000 1.366 0.172
asser_t1 ~~ d_asser_1 -0.004 -0.052 0.044 -0.068 -0.273 0.785
d_asser_1 ~~ sa07_02_t1 0.045 -0.037 0.127 0.272 1.817 0.069
sa07_02_t1 ~~ sa07_02_t1 0.997 0.831 1.163 1.000 19.717 0.000

Correlation of specific, facet-level acceptance goals with assertiveness change score (ideal-personality) is not significantly different from zero, r = 0.272, p = 0.069.

6.5.2.9 Energy - current-personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 8062.016 8145.992 0.971 0.047 0.055
# parameters of interest
params_lcs_energ_curr_hyp5 <- broom::tidy(fit_mi_lcs_energ_curr_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.019 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.488 NA NA
d_energ_1 ~1 0.047 -0.020 0.113 0.256 2.322 0.020
energ_t1 ~1 3.324 3.135 3.513 8.682 57.901 0.000
d_energ_1 ~~ d_energ_1 0.034 -0.021 0.088 1.000 2.022 0.043
energ_t1 ~~ d_energ_1 -0.020 -0.055 0.016 -0.279 -1.835 0.067
d_energ_1 ~~ sa06_01_t1 -0.003 -0.049 0.042 -0.018 -0.245 0.806
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with energy change score (current-personality) is not significantly different from zero, r = -0.018, p = 0.806.

6.5.2.10 Energy - ideal-personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7506.116 7590.092 0.891 0.057 0.066
# parameters of interest
params_lcs_energ_ideal_hyp5 <- broom::tidy(fit_mi_lcs_energ_ideal_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.009 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.780 NA NA
d_energ_1 ~1 -0.002 -0.056 0.052 -0.011 -0.114 0.909
energ_t1 ~1 3.779 3.583 3.974 17.236 63.551 0.000
d_energ_1 ~~ d_energ_1 0.029 -0.050 0.107 1.000 1.202 0.229
energ_t1 ~~ d_energ_1 -0.015 -0.060 0.030 -0.398 -1.082 0.279
d_energ_1 ~~ sa06_01_t1 0.010 -0.034 0.055 0.062 0.781 0.435
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with energy change score (ideal-personality) is not significantly different from zero, r = 0.062, p = 0.435.

6.5.2.11 Energy - current-personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 8059.78 8143.756 0.903 0.09 0.113
# parameters of interest
params_lcs_energ_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_energ_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~~ sa07_03_t1", "sa07_03_t1 ~~ sa07_03_t1", # acceptance goals
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.049 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.523 NA NA
d_energ_1 ~1 0.048 -0.019 0.114 0.249 2.346 0.019
energ_t1 ~1 3.324 3.135 3.513 8.679 57.888 0.000
d_energ_1 ~~ d_energ_1 0.037 -0.023 0.096 1.000 2.032 0.042
energ_t1 ~~ d_energ_1 -0.025 -0.067 0.018 -0.341 -1.929 0.054
d_energ_1 ~~ sa07_03_t1 -0.028 -0.092 0.037 -0.146 -1.415 0.157
sa07_03_t1 ~~ sa07_03_t1 0.997 0.815 1.179 1.000 18.028 0.000

Correlation of specific, facet-level acceptance goals with energy change score (current-personality) is not significantly different from zero, r = -0.146, p = 0.157.

6.5.2.12 Energy - ideal-personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7506.525 7590.501 0.921 0.048 0.057
# parameters of interest
params_lcs_energ_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_energ_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~~ sa07_03_t1", "sa07_03_t1 ~~ sa07_03_t1", # acceptance goals
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.005 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.769 NA NA
d_energ_1 ~1 -0.002 -0.056 0.052 -0.012 -0.125 0.900
energ_t1 ~1 3.779 3.583 3.974 17.154 63.534 0.000
d_energ_1 ~~ d_energ_1 0.028 -0.049 0.106 1.000 1.210 0.226
energ_t1 ~~ d_energ_1 -0.014 -0.058 0.029 -0.389 -1.083 0.279
d_energ_1 ~~ sa07_03_t1 0.005 -0.039 0.050 0.032 0.398 0.690
sa07_03_t1 ~~ sa07_03_t1 0.997 0.815 1.179 1.000 18.028 0.000

Correlation of specific, facet-level acceptance goals with energy change score (ideal-personality) is not significantly different from zero, r = 0.032, p = 0.69.

6.5.2.13 Compassion - current-personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7841.336 7925.312 0.972 0.043 0.049
# parameters of interest
params_lcs_compa_curr_hyp5 <- broom::tidy(fit_mi_lcs_compa_curr_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 0.892 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.546 NA NA
d_compa_1 ~1 0.050 -0.071 0.172 0.129 1.366 0.172
compa_t1 ~1 4.213 4.062 4.364 6.607 91.772 0.000
d_compa_1 ~~ d_compa_1 0.152 -0.025 0.329 1.000 2.829 0.005
compa_t1 ~~ d_compa_1 -0.024 -0.135 0.087 -0.097 -0.713 0.476
d_compa_1 ~~ sa06_01_t1 -0.043 -0.159 0.072 -0.111 -1.236 0.216
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with compassion change score (current-personality) is not significantly different from zero, r = -0.111, p = 0.216.

6.5.2.14 Compassion - ideal-personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 8110.185 8194.161 0.971 0.034 0.048
# parameters of interest
params_lcs_compa_ideal_hyp5 <- broom::tidy(fit_mi_lcs_compa_ideal_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.016 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.604 NA NA
d_compa_1 ~1 0.019 -0.120 0.158 0.053 0.457 0.648
compa_t1 ~1 4.291 4.132 4.449 6.936 89.023 0.000
d_compa_1 ~~ d_compa_1 0.135 -0.057 0.327 1.000 2.315 0.021
compa_t1 ~~ d_compa_1 -0.073 -0.204 0.057 -0.323 -1.856 0.064
d_compa_1 ~~ sa06_01_t1 -0.005 -0.126 0.116 -0.014 -0.138 0.890
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with compassion change score (ideal-personality) is not significantly different from zero, r = -0.014, p = 0.89.

6.5.2.15 Compassion - current-personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7836.459 7920.435 0.942 0.063 0.076
# parameters of interest
params_lcs_compa_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_compa_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~~ sa07_04_t1", "sa07_04_t1 ~~ sa07_04_t1", # acceptance goals
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 0.919 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.586 NA NA
d_compa_1 ~1 0.046 -0.077 0.169 0.113 1.236 0.217
compa_t1 ~1 4.213 4.062 4.364 6.578 91.771 0.000
d_compa_1 ~~ d_compa_1 0.166 -0.026 0.359 1.000 2.843 0.004
compa_t1 ~~ d_compa_1 -0.046 -0.165 0.074 -0.175 -1.255 0.210
d_compa_1 ~~ sa07_04_t1 -0.092 -0.240 0.056 -0.226 -2.053 0.040
sa07_04_t1 ~~ sa07_04_t1 0.997 0.823 1.172 1.000 18.799 0.000

Correlation of specific, facet-level acceptance goals with compassion change score (current-personality) is (barely) significantly different from zero, r = -0.226, p = 0.04.

6.5.2.16 Compassion - ideal-personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 8109.003 8192.979 0.945 0.047 0.058
# parameters of interest
params_lcs_compa_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_compa_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~~ sa07_04_t1", "sa07_04_t1 ~~ sa07_04_t1", # acceptance goals
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.025 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.623 NA NA
d_compa_1 ~1 0.017 -0.122 0.157 0.046 0.410 0.682
compa_t1 ~1 4.291 4.132 4.449 6.934 88.972 0.000
d_compa_1 ~~ d_compa_1 0.142 -0.053 0.337 1.000 2.393 0.017
compa_t1 ~~ d_compa_1 -0.080 -0.212 0.052 -0.344 -1.993 0.046
d_compa_1 ~~ sa07_04_t1 -0.042 -0.175 0.091 -0.111 -1.036 0.300
sa07_04_t1 ~~ sa07_04_t1 0.997 0.823 1.172 1.000 18.799 0.000

Correlation of specific, facet-level acceptance goals with compassion change score (ideal-personality) is not significantly different from zero, r = -0.111, p = 0.3.

6.5.2.17 Respectfulness - current-personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 6832.918 6916.894 0.958 0.056 0.059
# parameters of interest
params_lcs_respe_curr_hyp5 <- broom::tidy(fit_mi_lcs_respe_curr_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 0.996 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.629 NA NA
d_respe_1 ~1 0.024 -0.074 0.121 0.072 0.804 0.421
respe_t1 ~1 4.444 4.326 4.562 8.449 124.133 0.000
d_respe_1 ~~ d_respe_1 0.110 -0.025 0.246 1.000 2.680 0.007
respe_t1 ~~ d_respe_1 -0.054 -0.140 0.032 -0.309 -2.069 0.039
d_respe_1 ~~ sa06_01_t1 -0.007 -0.086 0.072 -0.022 -0.308 0.758
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with respectfulness change score (current-personality) is not significantly different from zero, r = -0.022, p = 0.758.

6.5.2.18 Respectfulness - ideal-personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 6291.764 6375.74 0.932 0.065 0.061
# parameters of interest
params_lcs_respe_ideal_hyp5 <- broom::tidy(fit_mi_lcs_respe_ideal_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 0.996 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.386 NA NA
d_respe_1 ~1 -0.001 -0.069 0.068 -0.005 -0.035 0.972
respe_t1 ~1 4.625 4.516 4.734 12.258 139.827 0.000
d_respe_1 ~~ d_respe_1 0.021 -0.024 0.067 1.000 1.536 0.125
respe_t1 ~~ d_respe_1 -0.010 -0.054 0.034 -0.184 -0.761 0.447
d_respe_1 ~~ sa06_01_t1 -0.004 -0.071 0.063 -0.029 -0.209 0.834
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with respectfulness change score (ideal-personality) is not significantly different from zero, r = -0.029, p = 0.834.

6.5.2.19 Respectfulness - current-personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 6804.501 6888.477 0.929 0.076 0.1
# parameters of interest
params_lcs_respe_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_respe_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~~ sa07_05_t1", "sa07_05_t1 ~~ sa07_05_t1", # acceptance goals
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.065 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.742 NA NA
d_respe_1 ~1 0.021 -0.076 0.118 0.058 0.716 0.474
respe_t1 ~1 4.444 4.326 4.562 8.442 124.033 0.000
d_respe_1 ~~ d_respe_1 0.134 -0.023 0.292 1.000 2.808 0.005
respe_t1 ~~ d_respe_1 -0.084 -0.176 0.009 -0.433 -2.969 0.003
d_respe_1 ~~ sa07_05_t1 -0.147 -0.274 -0.020 -0.402 -3.818 0.000
sa07_05_t1 ~~ sa07_05_t1 0.997 0.737 1.257 1.000 12.613 0.000

Correlation of specific, facet-level acceptance goals with respectfulness change score (current-personality) is significantly different from zero, r = -0.402, p = 0.

6.5.2.20 Respectfulness - ideal-personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 6290.466 6374.443 0.905 0.078 0.066
# parameters of interest
params_lcs_respe_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_respe_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~~ sa07_05_t1", "sa07_05_t1 ~~ sa07_05_t1", # acceptance goals
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.004 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.398 NA NA
d_respe_1 ~1 -0.001 -0.071 0.068 -0.009 -0.063 0.950
respe_t1 ~1 4.625 4.516 4.734 12.144 139.684 0.000
d_respe_1 ~~ d_respe_1 0.023 -0.026 0.071 1.000 1.545 0.122
respe_t1 ~~ d_respe_1 -0.012 -0.058 0.034 -0.209 -0.867 0.386
d_respe_1 ~~ sa07_05_t1 -0.023 -0.100 0.054 -0.152 -0.984 0.325
sa07_05_t1 ~~ sa07_05_t1 0.997 0.737 1.257 1.000 12.613 0.000

Correlation of specific, facet-level acceptance goals with respectfulness change score (ideal-personality) is not significantly different from zero, r = -0.152, p = 0.325.

6.5.2.21 Trust - current-personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 8120.247 8204.224 0.97 0.046 0.052
# parameters of interest
params_lcs_trust_curr_hyp5 <- broom::tidy(fit_mi_lcs_trust_curr_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.038 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.313 NA NA
d_trust_1 ~1 0.096 -0.021 0.213 0.445 2.691 0.007
trust_t1 ~1 3.150 2.952 3.348 4.415 52.426 0.000
d_trust_1 ~~ d_trust_1 0.046 -0.077 0.170 1.000 1.231 0.218
trust_t1 ~~ d_trust_1 -0.042 -0.142 0.059 -0.271 -1.364 0.173
d_trust_1 ~~ sa06_01_t1 0.008 -0.087 0.103 0.038 0.283 0.777
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with trust change score (current-personality) is not significantly different from zero, r = 0.038, p = 0.777.

6.5.2.22 Trust - ideal-personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7834.982 7918.959 0.967 0.037 0.044
# parameters of interest
params_lcs_trust_ideal_hyp5 <- broom::tidy(fit_mi_lcs_trust_ideal_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.107 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.597 NA NA
d_trust_1 ~1 0.014 -0.090 0.118 0.052 0.455 0.649
trust_t1 ~1 4.054 3.888 4.220 7.932 80.303 0.000
d_trust_1 ~~ d_trust_1 0.076 -0.043 0.195 1.000 2.108 0.035
trust_t1 ~~ d_trust_1 -0.062 -0.138 0.013 -0.440 -2.706 0.007
d_trust_1 ~~ sa06_01_t1 0.009 -0.074 0.093 0.034 0.371 0.710
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with trust change score (ideal-personality) is not significantly different from zero, r = 0.034, p = 0.71.

6.5.2.23 Trust - current-personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 8118.894 8202.871 0.944 0.064 0.075
# parameters of interest
params_lcs_trust_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_trust_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~~ sa07_06_t1", "sa07_06_t1 ~~ sa07_06_t1", # acceptance goals
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.025 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.296 NA NA
d_trust_1 ~1 0.096 -0.021 0.213 0.463 2.689 0.007
trust_t1 ~1 3.150 2.952 3.348 4.402 52.402 0.000
d_trust_1 ~~ d_trust_1 0.043 -0.080 0.165 1.000 1.150 0.250
trust_t1 ~~ d_trust_1 -0.034 -0.134 0.067 -0.229 -1.111 0.267
d_trust_1 ~~ sa07_06_t1 0.040 -0.078 0.158 0.193 1.108 0.268
sa07_06_t1 ~~ sa07_06_t1 0.997 0.823 1.171 1.000 18.829 0.000

Correlation of specific, facet-level acceptance goals with trust change score (current-personality) is not significantly different from zero, r = 0.193, p = 0.268.

6.5.2.24 Trust - ideal-personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7834.687 7918.663 0.967 0.037 0.043
# parameters of interest
params_lcs_trust_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_trust_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~~ sa07_06_t1", "sa07_06_t1 ~~ sa07_06_t1", # acceptance goals
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.106 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.595 NA NA
d_trust_1 ~1 0.014 -0.089 0.118 0.052 0.450 0.653
trust_t1 ~1 4.054 3.888 4.220 7.959 80.332 0.000
d_trust_1 ~~ d_trust_1 0.075 -0.044 0.194 1.000 2.080 0.038
trust_t1 ~~ d_trust_1 -0.061 -0.137 0.014 -0.439 -2.677 0.007
d_trust_1 ~~ sa07_06_t1 0.018 -0.076 0.112 0.066 0.629 0.529
sa07_06_t1 ~~ sa07_06_t1 0.997 0.823 1.171 1.000 18.829 0.000

Correlation of specific, facet-level acceptance goals with trust change score (ideal-personality) is not significantly different from zero, r = 0.066, p = 0.529.

6.5.2.25 Organization - current-personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7778.247 7862.224 1 0 0.022
# parameters of interest
params_lcs_organ_curr_hyp5 <- broom::tidy(fit_mi_lcs_organ_curr_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.003 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.509 NA NA
d_organ_1 ~1 0.064 -0.072 0.200 0.138 1.554 0.120
organ_t1 ~1 3.037 2.810 3.263 3.313 44.122 0.000
d_organ_1 ~~ d_organ_1 0.216 0.038 0.395 1.000 3.985 0.000
organ_t1 ~~ d_organ_1 -0.110 -0.248 0.027 -0.259 -2.638 0.008
d_organ_1 ~~ sa06_01_t1 -0.083 -0.210 0.044 -0.178 -2.143 0.032
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with organization change score (current-personality) is (barely) significantly different from zero, r = -0.178, p = 0.032.

6.5.2.26 Organization - ideal-personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 6764.813 6848.79 0.979 0.028 0.049
# parameters of interest
params_lcs_organ_ideal_hyp5 <- broom::tidy(fit_mi_lcs_organ_ideal_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 0.971 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.603 NA NA
d_organ_1 ~1 0.005 -0.090 0.100 0.020 0.182 0.856
organ_t1 ~1 4.246 4.073 4.418 10.044 81.011 0.000
d_organ_1 ~~ d_organ_1 0.069 -0.032 0.170 1.000 2.243 0.025
organ_t1 ~~ d_organ_1 -0.029 -0.112 0.054 -0.262 -1.154 0.249
d_organ_1 ~~ sa06_01_t1 -0.003 -0.083 0.077 -0.013 -0.139 0.889
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with organization change score (ideal-personality) is not significantly different from zero, r = -0.013, p = 0.889.

6.5.2.27 Organization - current-personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7772.127 7856.103 0.919 0.096 0.143
# parameters of interest
params_lcs_organ_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_organ_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~~ sa07_07_t1", "sa07_07_t1 ~~ sa07_07_t1", # acceptance goals
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.073 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.601 NA NA
d_organ_1 ~1 0.067 -0.070 0.203 0.129 1.611 0.107
organ_t1 ~1 3.036 2.810 3.263 3.285 44.090 0.000
d_organ_1 ~~ d_organ_1 0.268 0.053 0.483 1.000 4.104 0.000
organ_t1 ~~ d_organ_1 -0.190 -0.364 -0.016 -0.397 -3.594 0.000
d_organ_1 ~~ sa07_07_t1 -0.148 -0.294 -0.001 -0.286 -3.323 0.001
sa07_07_t1 ~~ sa07_07_t1 0.997 0.850 1.144 1.000 22.344 0.000

The correlation of specific, facet-level acceptance goals with the organization change score (current-personality) is significantly different from zero, r = -0.286, p = 0.001.

6.5.2.28 Organization - ideal-personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 6762.972 6846.948 0.98 0.027 0.046
# parameters of interest
params_lcs_organ_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_organ_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~~ sa07_07_t1", "sa07_07_t1 ~~ sa07_07_t1", # acceptance goals
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 0.973 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.607 NA NA
d_organ_1 ~1 0.005 -0.090 0.100 0.019 0.175 0.861
organ_t1 ~1 4.246 4.073 4.418 10.013 80.979 0.000
d_organ_1 ~~ d_organ_1 0.070 -0.033 0.173 1.000 2.242 0.025
organ_t1 ~~ d_organ_1 -0.030 -0.112 0.053 -0.266 -1.193 0.233
d_organ_1 ~~ sa07_07_t1 -0.035 -0.128 0.057 -0.134 -1.259 0.208
sa07_07_t1 ~~ sa07_07_t1 0.997 0.850 1.144 1.000 22.344 0.000

Correlation of specific, facet-level acceptance goals with organization change score (ideal-personality) is not significantly different from zero, r = -0.134, p = 0.208.

6.5.2.29 Productiveness - current-personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7682.118 7766.094 0.965 0.058 0.049
# parameters of interest
params_lcs_produ_curr_hyp5 <- broom::tidy(fit_mi_lcs_produ_curr_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 0.962 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.544 NA NA
d_produ_1 ~1 0.126 0.002 0.250 0.322 3.352 0.001
produ_t1 ~1 2.572 2.356 2.788 3.699 39.252 0.000
d_produ_1 ~~ d_produ_1 0.154 0.024 0.285 1.000 3.894 0.000
produ_t1 ~~ d_produ_1 -0.058 -0.152 0.036 -0.212 -2.031 0.042
d_produ_1 ~~ sa06_01_t1 -0.035 -0.139 0.069 -0.090 -1.111 0.267
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with productiveness change score (current-personality) is not significantly different from zero, r = -0.09, p = 0.267.

6.5.2.30 Productiveness - ideal-personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 6162.71 6246.687 0.909 0.068 0.069
# parameters of interest
params_lcs_produ_ideal_hyp5 <- broom::tidy(fit_mi_lcs_produ_ideal_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.045 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.675 NA NA
d_produ_1 ~1 0.029 -0.049 0.108 0.124 1.241 0.215
produ_t1 ~1 4.415 4.285 4.546 12.001 111.163 0.000
d_produ_1 ~~ d_produ_1 0.056 -0.024 0.137 1.000 2.321 0.020
produ_t1 ~~ d_produ_1 -0.034 -0.095 0.027 -0.388 -1.823 0.068
d_produ_1 ~~ sa06_01_t1 0.006 -0.049 0.062 0.027 0.374 0.708
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with productiveness change score (ideal-personality) is not significantly different from zero, r = 0.027, p = 0.708.

6.5.2.31 Productiveness - current-personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7679.457 7763.433 0.879 0.113 0.137
# parameters of interest
params_lcs_produ_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_produ_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~~ sa07_08_t1", "sa07_08_t1 ~~ sa07_08_t1", # acceptance goals
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.002 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.594 NA NA
d_produ_1 ~1 0.123 -0.001 0.248 0.300 3.256 0.001
produ_t1 ~1 2.572 2.357 2.788 3.707 39.250 0.000
d_produ_1 ~~ d_produ_1 0.169 0.023 0.316 1.000 3.808 0.000
produ_t1 ~~ d_produ_1 -0.085 -0.201 0.030 -0.299 -2.430 0.015
d_produ_1 ~~ sa07_08_t1 -0.073 -0.204 0.058 -0.177 -1.833 0.067
sa07_08_t1 ~~ sa07_08_t1 0.997 0.829 1.165 1.000 19.477 0.000

Correlation of specific, facet-level acceptance goals with productiveness change score (current-personality) is not significantly different from zero, r = -0.177, p = 0.067.

6.5.2.32 Productiveness - ideal-personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 6159.374 6243.35 0.911 0.068 0.066
# parameters of interest
params_lcs_produ_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_produ_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~~ sa07_08_t1", "sa07_08_t1 ~~ sa07_08_t1", # acceptance goals
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.047 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.677 NA NA
d_produ_1 ~1 0.028 -0.051 0.107 0.117 1.168 0.243
produ_t1 ~1 4.415 4.284 4.546 11.941 111.118 0.000
d_produ_1 ~~ d_produ_1 0.057 -0.024 0.138 1.000 2.324 0.020
produ_t1 ~~ d_produ_1 -0.035 -0.096 0.027 -0.391 -1.852 0.064
d_produ_1 ~~ sa07_08_t1 -0.036 -0.103 0.031 -0.153 -1.789 0.074
sa07_08_t1 ~~ sa07_08_t1 0.997 0.829 1.165 1.000 19.477 0.000

Correlation of specific, facet-level acceptance goals with productiveness change score (ideal-personality) is not significantly different from zero, r = -0.153, p = 0.074.

6.5.2.33 Responsibility - current-personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7780.117 7864.093 0.871 0.104 0.093
# parameters of interest
params_lcs_respo_curr_hyp5 <- broom::tidy(fit_mi_lcs_respo_curr_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.018 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.510 NA NA
d_respo_1 ~1 0.019 -0.042 0.080 0.105 1.044 0.297
respo_t1 ~1 3.659 3.489 3.829 10.024 70.694 0.000
d_respo_1 ~~ d_respo_1 0.033 -0.021 0.088 1.000 2.012 0.044
respo_t1 ~~ d_respo_1 -0.019 -0.053 0.015 -0.286 -1.850 0.064
d_respo_1 ~~ sa06_01_t1 -0.011 -0.062 0.041 -0.058 -0.668 0.504
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with responsibility change score (current-personality) is not significantly different from zero, r = -0.058, p = 0.504.

6.5.2.34 Responsibility - ideal-personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 6981.335 7065.311 0.964 0.044 0.053
# parameters of interest
params_lcs_respo_ideal_hyp5 <- broom::tidy(fit_mi_lcs_respo_ideal_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 0.917 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.628 NA NA
d_respo_1 ~1 0.020 -0.071 0.111 0.072 0.714 0.475
respo_t1 ~1 4.238 4.064 4.413 10.536 79.921 0.000
d_respo_1 ~~ d_respo_1 0.076 -0.022 0.174 1.000 2.556 0.011
respo_t1 ~~ d_respo_1 -0.023 -0.086 0.041 -0.204 -1.175 0.240
d_respo_1 ~~ sa06_01_t1 0.039 -0.038 0.117 0.143 1.685 0.092
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with responsibility change score (ideal-personality) is not significantly different from zero, r = 0.143, p = 0.092.

6.5.2.35 Responsibility - current-personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7777.33 7861.307 0.813 0.129 0.136
# parameters of interest
params_lcs_respo_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_respo_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~~ sa07_09_t1", "sa07_09_t1 ~~ sa07_09_t1", # acceptance goals
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.053 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.558 NA NA
d_respo_1 ~1 0.020 -0.042 0.081 0.100 1.048 0.295
respo_t1 ~1 3.659 3.488 3.829 9.965 70.676 0.000
d_respo_1 ~~ d_respo_1 0.038 -0.023 0.099 1.000 2.039 0.041
respo_t1 ~~ d_respo_1 -0.026 -0.069 0.018 -0.358 -1.927 0.054
d_respo_1 ~~ sa07_09_t1 -0.034 -0.107 0.040 -0.173 -1.505 0.132
sa07_09_t1 ~~ sa07_09_t1 0.997 0.828 1.166 1.000 19.415 0.000

The correlation of specific, facet-level acceptance goals with the responsibility change score (current-personality) is not significantly different from zero, r = -0.173, p = 0.132.

6.5.2.36 Responsibility - ideal-personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 6981.061 7065.038 0.958 0.047 0.052
# parameters of interest
params_lcs_respo_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_respo_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~~ sa07_09_t1", "sa07_09_t1 ~~ sa07_09_t1", # acceptance goals
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 0.917 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.630 NA NA
d_respo_1 ~1 0.017 -0.073 0.106 0.063 0.617 0.537
respo_t1 ~1 4.239 4.064 4.413 10.867 79.965 0.000
d_respo_1 ~~ d_respo_1 0.072 -0.022 0.166 1.000 2.515 0.012
respo_t1 ~~ d_respo_1 -0.021 -0.080 0.038 -0.205 -1.193 0.233
d_respo_1 ~~ sa07_09_t1 -0.041 -0.120 0.039 -0.152 -1.689 0.091
sa07_09_t1 ~~ sa07_09_t1 0.997 0.828 1.166 1.000 19.415 0.000

Correlation of specific, facet-level acceptance goals with responsibility change score (ideal-personality) is not significantly different from zero, r = -0.152, p = 0.091.

6.5.2.37 Anxiety - current-personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7961.499 8045.476 0.983 0.04 0.068
# parameters of interest
params_lcs_anxie_curr_hyp5 <- broom::tidy(fit_mi_lcs_anxie_curr_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.976 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.423 NA NA
d_anxie_1 ~1 -0.189 -0.333 -0.044 -0.458 -4.304 0.000
anxie_t1 ~1 3.123 2.902 3.344 3.291 46.476 0.000
d_anxie_1 ~~ d_anxie_1 0.170 0.006 0.334 1.000 3.402 0.001
anxie_t1 ~~ d_anxie_1 -0.062 -0.203 0.079 -0.159 -1.449 0.147
d_anxie_1 ~~ sa06_01_t1 -0.031 -0.160 0.099 -0.074 -0.778 0.437
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with anxiety change score (current-personality) is not significantly different from zero, r = -0.074, p = 0.437.

6.5.2.38 Anxiety - ideal-personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7745.195 7829.172 0.923 0.049 0.061
# parameters of interest
params_lcs_anxie_ideal_hyp5 <- broom::tidy(fit_mi_lcs_anxie_ideal_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.185 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.739 NA NA
d_anxie_1 ~1 -0.019 -0.117 0.078 -0.076 -0.651 0.515
anxie_t1 ~1 1.470 1.337 1.603 3.599 36.304 0.000
d_anxie_1 ~~ d_anxie_1 0.065 -0.050 0.180 1.000 1.857 0.063
anxie_t1 ~~ d_anxie_1 -0.056 -0.162 0.049 -0.543 -1.760 0.078
d_anxie_1 ~~ sa06_01_t1 -0.014 -0.112 0.084 -0.055 -0.469 0.639
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with anxiety change score (ideal-personality) is not significantly different from zero, r = -0.055, p = 0.639.

6.5.2.39 Anxiety - current-personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7954.859 8038.835 0.952 0.068 0.105
# parameters of interest
params_lcs_anxie_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_anxie_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~~ sa07_10_t1", "sa07_10_t1 ~~ sa07_10_t1", # acceptance goals
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.022 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.476 NA NA
d_anxie_1 ~1 -0.187 -0.329 -0.045 -0.426 -4.344 0.000
anxie_t1 ~1 3.123 2.902 3.344 3.309 46.497 0.000
d_anxie_1 ~~ d_anxie_1 0.193 0.017 0.370 1.000 3.603 0.000
anxie_t1 ~~ d_anxie_1 -0.115 -0.264 0.033 -0.278 -2.557 0.011
d_anxie_1 ~~ sa07_10_t1 0.113 -0.027 0.254 0.258 2.652 0.008
sa07_10_t1 ~~ sa07_10_t1 0.997 0.844 1.150 1.000 21.431 0.000

Correlation of specific, facet-level acceptance goals with anxiety change score (current-personality) is significantly different from zero, r = 0.258, p = 0.008.

6.5.2.40 Anxiety - ideal-personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7745.404 7829.38 0.924 0.049 0.058
# parameters of interest
params_lcs_anxie_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_anxie_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~~ sa07_10_t1", "sa07_10_t1 ~~ sa07_10_t1", # acceptance goals
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.180 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.730 NA NA
d_anxie_1 ~1 -0.019 -0.117 0.078 -0.076 -0.651 0.515
anxie_t1 ~1 1.470 1.337 1.603 3.593 36.300 0.000
d_anxie_1 ~~ d_anxie_1 0.064 -0.050 0.178 1.000 1.849 0.064
anxie_t1 ~~ d_anxie_1 -0.056 -0.160 0.049 -0.537 -1.749 0.080
d_anxie_1 ~~ sa07_10_t1 0.009 -0.067 0.085 0.035 0.387 0.698
sa07_10_t1 ~~ sa07_10_t1 0.997 0.844 1.150 1.000 21.431 0.000

Correlation of specific, facet-level acceptance goals with anxiety change score (ideal-personality) is not significantly different from zero, r = 0.035, p = 0.698.

6.5.2.41 Depression - current-personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7876.749 7960.725 0.946 0.081 0.077
# parameters of interest
params_lcs_depre_curr_hyp5 <- broom::tidy(fit_mi_lcs_depre_curr_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 0.984 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.504 NA NA
d_depre_1 ~1 -0.126 -0.216 -0.036 -0.445 -4.616 0.000
depre_t1 ~1 2.974 2.778 3.170 5.383 49.897 0.000
d_depre_1 ~~ d_depre_1 0.080 0.018 0.143 1.000 4.214 0.000
depre_t1 ~~ d_depre_1 -0.035 -0.079 0.009 -0.223 -2.607 0.009
d_depre_1 ~~ sa06_01_t1 -0.007 -0.075 0.061 -0.024 -0.327 0.744
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with depression change score (current-personality) is not significantly different from zero, r = -0.024, p = 0.744.

6.5.2.42 Depression - ideal-personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 6171.123 6255.1 0.897 0.072 0.075
# parameters of interest
params_lcs_depre_ideal_hyp5 <- broom::tidy(fit_mi_lcs_depre_ideal_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.157 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.701 NA NA
d_depre_1 ~1 -0.006 -0.093 0.080 -0.023 -0.233 0.816
depre_t1 ~1 1.557 1.430 1.683 3.557 40.494 0.000
d_depre_1 ~~ d_depre_1 0.070 -0.028 0.169 1.000 2.345 0.019
depre_t1 ~~ d_depre_1 -0.059 -0.141 0.023 -0.512 -2.380 0.017
d_depre_1 ~~ sa06_01_t1 -0.003 -0.083 0.078 -0.010 -0.106 0.916
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with depression change score (ideal-personality) is not significantly different from zero, r = -0.01, p = 0.916.

6.5.2.43 Depression - current-personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7873.622 7957.599 0.905 0.11 0.129
# parameters of interest
params_lcs_depre_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_depre_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~~ sa07_11_t1", "sa07_11_t1 ~~ sa07_11_t1", # acceptance goals
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.015 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.540 NA NA
d_depre_1 ~1 -0.126 -0.215 -0.037 -0.431 -4.645 0.000
depre_t1 ~1 2.974 2.778 3.170 5.418 49.894 0.000
d_depre_1 ~~ d_depre_1 0.085 0.019 0.151 1.000 4.253 0.000
depre_t1 ~~ d_depre_1 -0.047 -0.095 0.001 -0.294 -3.218 0.001
d_depre_1 ~~ sa07_11_t1 0.044 -0.034 0.121 0.149 1.847 0.065
sa07_11_t1 ~~ sa07_11_t1 0.997 0.848 1.146 1.000 21.989 0.000

Correlation of specific, facet-level acceptance goals with depression change score (current-personality) is not significantly different from zero, r = 0.149, p = 0.065.

6.5.2.44 Depression - ideal-personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 6171.076 6255.052 0.942 0.053 0.052
# parameters of interest
params_lcs_depre_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_depre_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~~ sa07_11_t1", "sa07_11_t1 ~~ sa07_11_t1", # acceptance goals
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.157 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.700 NA NA
d_depre_1 ~1 -0.006 -0.093 0.080 -0.024 -0.237 0.813
depre_t1 ~1 1.557 1.430 1.683 3.558 40.494 0.000
d_depre_1 ~~ d_depre_1 0.070 -0.028 0.168 1.000 2.358 0.018
depre_t1 ~~ d_depre_1 -0.059 -0.141 0.022 -0.511 -2.394 0.017
d_depre_1 ~~ sa07_11_t1 0.006 -0.064 0.075 0.021 0.259 0.795
sa07_11_t1 ~~ sa07_11_t1 0.997 0.848 1.146 1.000 21.989 0.000

Correlation of specific, facet-level acceptance goals with depression change score (ideal-personality) is not significantly different from zero, r = 0.021, p = 0.795.

6.5.2.45 Volatility - current-personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 8035.348 8119.325 0.986 0.037 0.056
# parameters of interest
params_lcs_volat_curr_hyp5 <- broom::tidy(fit_mi_lcs_volat_curr_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.058 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.453 NA NA
d_volat_1 ~1 -0.133 -0.267 0.001 -0.325 -3.255 0.001
volat_t1 ~1 3.119 2.895 3.342 3.275 45.995 0.000
d_volat_1 ~~ d_volat_1 0.166 0.004 0.328 1.000 3.369 0.001
volat_t1 ~~ d_volat_1 -0.132 -0.264 0.001 -0.339 -3.277 0.001
d_volat_1 ~~ sa06_01_t1 0.017 -0.107 0.141 0.041 0.444 0.657
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with volatility change score (current-personality) is not significantly different from zero, r = 0.041, p = 0.657.

6.5.2.46 Volatility - ideal-personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7228.173 7312.149 0.945 0.045 0.056
# parameters of interest
params_lcs_volat_ideal_hyp5 <- broom::tidy(fit_mi_lcs_volat_ideal_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.025 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.581 NA NA
d_volat_1 ~1 -0.010 -0.115 0.096 -0.038 -0.308 0.758
volat_t1 ~1 1.647 1.512 1.781 3.596 40.325 0.000
d_volat_1 ~~ d_volat_1 0.067 -0.045 0.179 1.000 1.977 0.048
volat_t1 ~~ d_volat_1 -0.039 -0.121 0.043 -0.326 -1.555 0.120
d_volat_1 ~~ sa06_01_t1 -0.032 -0.125 0.061 -0.123 -1.124 0.261
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

The correlation of general acceptance goal with the volatility change score (ideal-personality) is not significantly different from zero, r = -0.123, p = 0.261.

6.5.2.47 Volatility - current-personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 8034.815 8118.792 0.941 0.078 0.111
# parameters of interest
params_lcs_volat_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_volat_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~~ sa07_12_t1", "sa07_12_t1 ~~ sa07_12_t1", # acceptance goals
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.071 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.467 NA NA
d_volat_1 ~1 -0.133 -0.267 0.001 -0.319 -3.254 0.001
volat_t1 ~1 3.119 2.895 3.342 3.276 45.998 0.000
d_volat_1 ~~ d_volat_1 0.173 0.006 0.339 1.000 3.406 0.001
volat_t1 ~~ d_volat_1 -0.144 -0.292 0.004 -0.365 -3.208 0.001
d_volat_1 ~~ sa07_12_t1 0.035 -0.110 0.179 0.084 0.789 0.430
sa07_12_t1 ~~ sa07_12_t1 0.997 0.823 1.171 1.000 18.847 0.000

Correlation of specific, facet-level acceptance goals with volatility change score (current-personality) is not significantly different from zero, r = 0.084, p = 0.43.

6.5.2.48 Volatility - ideal-personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7229.383 7313.359 0.929 0.052 0.064
# parameters of interest
params_lcs_volat_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_volat_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~~ sa07_12_t1", "sa07_12_t1 ~~ sa07_12_t1", # acceptance goals
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.015 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.562 NA NA
d_volat_1 ~1 -0.009 -0.114 0.096 -0.036 -0.285 0.776
volat_t1 ~1 1.646 1.512 1.781 3.588 40.318 0.000
d_volat_1 ~~ d_volat_1 0.065 -0.046 0.175 1.000 1.923 0.054
volat_t1 ~~ d_volat_1 -0.035 -0.116 0.045 -0.303 -1.449 0.147
d_volat_1 ~~ sa07_12_t1 -0.009 -0.091 0.072 -0.037 -0.383 0.701
sa07_12_t1 ~~ sa07_12_t1 0.997 0.823 1.171 1.000 18.847 0.000

Correlation of specific, facet-level acceptance goals with volatility change score (ideal-personality) is not significantly different from zero, r = -0.037, p = 0.701.

6.5.2.49 Curiosity - current-personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7694.052 7778.028 0.984 0.035 0.046
# parameters of interest
params_lcs_curio_curr_hyp5 <- broom::tidy(fit_mi_lcs_curio_curr_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.084 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 NA NA NA
d_curio_1 ~1 0.059 -0.019 0.136 NA 2.498 0.013
curio_t1 ~1 4.032 3.866 4.199 7.224 79.614 0.000
d_curio_1 ~~ d_curio_1 -0.012 -0.073 0.049 NA -0.667 0.505
curio_t1 ~~ d_curio_1 -0.017 -0.073 0.039 -0.274 -1.008 0.313
d_curio_1 ~~ sa06_01_t1 -0.001 -0.066 0.065 -0.005 -0.027 0.978
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with curiosity change score (current-personality) is not significantly different from zero, r = -0.005, p = 0.978.

6.5.2.50 Curiosity - ideal-personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7630.715 7714.691 0.967 0.037 0.054
# parameters of interest
params_lcs_curio_ideal_hyp5 <- broom::tidy(fit_mi_lcs_curio_ideal_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.076 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.530 NA NA
d_curio_1 ~1 0.017 -0.073 0.106 0.082 0.618 0.537
curio_t1 ~1 4.457 4.331 4.584 10.770 116.320 0.000
d_curio_1 ~~ d_curio_1 0.042 -0.039 0.122 1.000 1.700 0.089
curio_t1 ~~ d_curio_1 -0.032 -0.096 0.032 -0.384 -1.664 0.096
d_curio_1 ~~ sa06_01_t1 -0.036 -0.103 0.032 -0.175 -1.739 0.082
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with curiosity change score (ideal-personality) is not significantly different from zero, r = -0.175, p = 0.082.

6.5.2.51 Curiosity - current-personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7693.417 7777.393 0.951 0.062 0.086
# parameters of interest
params_lcs_curio_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_curio_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~~ sa07_13_t1", "sa07_13_t1 ~~ sa07_13_t1", # acceptance goals
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.074 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 NA NA NA
d_curio_1 ~1 0.058 -0.018 0.135 NA 2.507 0.012
curio_t1 ~1 4.033 3.866 4.199 7.264 79.624 0.000
d_curio_1 ~~ d_curio_1 -0.013 -0.074 0.047 NA -0.729 0.466
curio_t1 ~~ d_curio_1 -0.014 -0.069 0.041 -0.214 -0.820 0.412
d_curio_1 ~~ sa07_13_t1 0.017 -0.052 0.086 0.149 0.819 0.413
sa07_13_t1 ~~ sa07_13_t1 0.997 0.809 1.185 1.000 17.438 0.000

The correlation of specific, facet-level acceptance goals with the curiosity change score (current-personality) is not significantly different from zero, r = 0.149, p = 0.413.

6.5.2.52 Curiosity - ideal-personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7632.744 7716.721 0.942 0.05 0.067
# parameters of interest
params_lcs_curio_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_curio_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~~ sa07_13_t1", "sa07_13_t1 ~~ sa07_13_t1", # acceptance goals
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.090 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.554 NA NA
d_curio_1 ~1 0.017 -0.072 0.105 0.080 0.616 0.538
curio_t1 ~1 4.458 4.332 4.584 10.864 116.520 0.000
d_curio_1 ~~ d_curio_1 0.043 -0.041 0.127 1.000 1.702 0.089
curio_t1 ~~ d_curio_1 -0.035 -0.103 0.033 -0.411 -1.695 0.090
d_curio_1 ~~ sa07_13_t1 -0.014 -0.088 0.059 -0.070 -0.648 0.517
sa07_13_t1 ~~ sa07_13_t1 0.997 0.809 1.185 1.000 17.438 0.000

Correlation of specific, facet-level acceptance goals with curiosity change score (ideal-personality) is not significantly different from zero, r = -0.07, p = 0.517.

6.5.2.53 Aesthetic - current-personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7997.129 8081.105 0.99 0.029 0.055
# parameters of interest
params_lcs_aesth_curr_hyp5 <- broom::tidy(fit_mi_lcs_aesth_curr_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.994 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.376 NA NA
d_aesth_1 ~1 -0.001 -0.049 0.047 -0.010 -0.087 0.931
aesth_t1 ~1 3.152 2.946 3.358 9.271 50.336 0.000
d_aesth_1 ~~ d_aesth_1 0.017 -0.020 0.053 1.000 1.478 0.140
aesth_t1 ~~ d_aesth_1 -0.008 -0.029 0.014 -0.174 -1.179 0.238
d_aesth_1 ~~ sa06_01_t1 -0.005 -0.046 0.037 -0.038 -0.383 0.701
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with aesthetic change score (current-personality) is not significantly different from zero, r = -0.038, p = 0.701.

6.5.2.54 Aesthetic - ideal-personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7659.407 7743.384 0.952 0.055 0.063
# parameters of interest
params_lcs_aesth_ideal_hyp5 <- broom::tidy(fit_mi_lcs_aesth_ideal_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.964 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.602 NA NA
d_aesth_1 ~1 0.020 -0.036 0.075 0.118 1.157 0.247
aesth_t1 ~1 3.097 2.870 3.324 11.664 44.863 0.000
d_aesth_1 ~~ d_aesth_1 0.028 -0.021 0.076 1.000 1.847 0.065
aesth_t1 ~~ d_aesth_1 -0.011 -0.040 0.018 -0.251 -1.242 0.214
d_aesth_1 ~~ sa06_01_t1 -0.009 -0.051 0.033 -0.055 -0.716 0.474
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with aesthetic change score (ideal-personality) is not significantly different from zero, r = -0.055, p = 0.474.

6.5.2.55 Aesthetic - current-personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7992.522 8076.499 0.967 0.055 0.087
# parameters of interest
params_lcs_aesth_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_aesth_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~~ sa07_14_t1", "sa07_14_t1 ~~ sa07_14_t1", # acceptance goals
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 1.020 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.407 NA NA
d_aesth_1 ~1 -0.002 -0.049 0.046 -0.011 -0.105 0.916
aesth_t1 ~1 3.152 2.946 3.358 9.322 50.334 0.000
d_aesth_1 ~~ d_aesth_1 0.018 -0.021 0.057 1.000 1.539 0.124
aesth_t1 ~~ d_aesth_1 -0.011 -0.035 0.013 -0.249 -1.549 0.121
d_aesth_1 ~~ sa07_14_t1 -0.030 -0.081 0.020 -0.226 -1.986 0.047
sa07_14_t1 ~~ sa07_14_t1 0.997 0.848 1.146 1.000 21.957 0.000

Correlation of specific, facet-level acceptance goals with aesthetic change score (current-personality) is (barely) significantly different from zero, r = -0.226, p = 0.047.

6.5.2.56 Aesthetic - ideal-personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7658.674 7742.65 0.948 0.058 0.068
# parameters of interest
params_lcs_aesth_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_aesth_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~~ sa07_14_t1", "sa07_14_t1 ~~ sa07_14_t1", # acceptance goals
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.978 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.622 NA NA
d_aesth_1 ~1 0.019 -0.036 0.075 0.115 1.148 0.251
aesth_t1 ~1 3.097 2.870 3.324 11.589 44.859 0.000
d_aesth_1 ~~ d_aesth_1 0.029 -0.022 0.080 1.000 1.854 0.064
aesth_t1 ~~ d_aesth_1 -0.013 -0.045 0.019 -0.282 -1.331 0.183
d_aesth_1 ~~ sa07_14_t1 -0.015 -0.061 0.031 -0.089 -1.088 0.277
sa07_14_t1 ~~ sa07_14_t1 0.997 0.848 1.146 1.000 21.957 0.000

Correlation of specific, facet-level acceptance goals with aesthetic change score (ideal-personality) is not significantly different from zero, r = -0.089, p = 0.277.

6.5.2.57 Imagination - current-personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7700.084 7784.06 0.956 0.059 0.05
# parameters of interest
params_lcs_imagi_curr_hyp5 <- broom::tidy(fit_mi_lcs_imagi_curr_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.067 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.428 NA NA
d_imagi_1 ~1 0.132 0.029 0.235 0.484 4.204 0.000
imagi_t1 ~1 3.641 3.466 3.816 5.360 68.404 0.000
d_imagi_1 ~~ d_imagi_1 0.074 -0.095 0.244 1.000 1.439 0.150
imagi_t1 ~~ d_imagi_1 -0.065 -0.190 0.060 -0.351 -1.716 0.086
d_imagi_1 ~~ sa06_01_t1 -0.009 -0.093 0.075 -0.034 -0.366 0.715
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with imagination change score (current-personality) is not significantly different from zero, r = -0.034, p = 0.715.

6.5.2.58 Imagination - ideal-personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7196.926 7280.902 0.925 0.061 0.06
# parameters of interest
params_lcs_imagi_ideal_hyp5 <- broom::tidy(fit_mi_lcs_imagi_ideal_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.036 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.640 NA NA
d_imagi_1 ~1 -0.012 -0.117 0.094 -0.035 -0.359 0.720
imagi_t1 ~1 4.544 4.415 4.674 8.602 115.758 0.000
d_imagi_1 ~~ d_imagi_1 0.106 -0.027 0.240 1.000 2.622 0.009
imagi_t1 ~~ d_imagi_1 -0.063 -0.166 0.041 -0.365 -1.997 0.046
d_imagi_1 ~~ sa06_01_t1 -0.042 -0.125 0.041 -0.129 -1.664 0.096
sa06_01_t1 ~~ sa06_01_t1 0.997 0.656 1.338 1.000 9.609 0.000
sa06_01_t1 ~1 0.000 -0.179 0.179 0.000 0.000 1.000

Correlation of general acceptance goal with imagination change score (ideal-personality) is not significantly different from zero, r = -0.129, p = 0.096.

6.5.2.59 Imagination - current-personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7697.169 7781.146 0.876 0.104 0.121
# parameters of interest
params_lcs_imagi_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_imagi_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~~ sa07_15_t1", "sa07_15_t1 ~~ sa07_15_t1", # acceptance goals
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.099 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.472 NA NA
d_imagi_1 ~1 0.131 0.028 0.234 0.450 4.193 0.000
imagi_t1 ~1 3.641 3.466 3.816 5.361 68.422 0.000
d_imagi_1 ~~ d_imagi_1 0.085 -0.091 0.261 1.000 1.586 0.113
imagi_t1 ~~ d_imagi_1 -0.082 -0.211 0.047 -0.416 -2.097 0.036
d_imagi_1 ~~ sa07_15_t1 -0.053 -0.156 0.050 -0.182 -1.696 0.090
sa07_15_t1 ~~ sa07_15_t1 0.997 0.856 1.138 1.000 23.329 0.000

Correlation of specific, facet-level acceptance goals with imagination change score (current-personality) is not significantly different from zero, r = -0.182, p = 0.09.

6.5.2.60 Imagination - ideal-personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 22 7195.638 7279.614 0.899 0.072 0.07
# parameters of interest
params_lcs_imagi_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_imagi_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~~ sa07_15_t1", "sa07_15_t1 ~~ sa07_15_t1", # acceptance goals
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.055 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.673 NA NA
d_imagi_1 ~1 -0.012 -0.119 0.094 -0.037 -0.383 0.702
imagi_t1 ~1 4.545 4.415 4.674 8.593 115.680 0.000
d_imagi_1 ~~ d_imagi_1 0.114 -0.025 0.252 1.000 2.695 0.007
imagi_t1 ~~ d_imagi_1 -0.071 -0.177 0.035 -0.399 -2.208 0.027
d_imagi_1 ~~ sa07_15_t1 -0.054 -0.151 0.044 -0.159 -1.809 0.070
sa07_15_t1 ~~ sa07_15_t1 0.997 0.856 1.138 1.000 23.329 0.000

Correlation of specific, facet-level acceptance goals with imagination change score (ideal-personality) is not significantly different from zero, r = -0.159, p = 0.07.

6.5.3 Hyp 5: Effects summary

Run models for all facets with a template & loop:

Show the code
# create df for table:

df_table_hyp5 <- bind_rows(
  #traits
  params_lcs_extra_curr_hyp5 %>% filter(term=="d_extra_1 ~~ sa06_01_t1"),
  params_lcs_extra_ideal_hyp5 %>% filter(term=="d_extra_1 ~~ sa06_01_t1"),
  params_lcs_extra_curr_specif_hyp5 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_extra_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_agree_curr_hyp5 %>% filter(term=="d_agree_1 ~~ sa06_01_t1"),
  params_lcs_agree_ideal_hyp5 %>% filter(term=="d_agree_1 ~~ sa06_01_t1"),
  params_lcs_agree_curr_specif_hyp5 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_agree_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_consc_curr_hyp5 %>% filter(term=="d_consc_1 ~~ sa06_01_t1"),
  params_lcs_consc_ideal_hyp5 %>% filter(term=="d_consc_1 ~~ sa06_01_t1"),
  params_lcs_consc_curr_specif_hyp5 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_consc_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_neuro_curr_hyp5 %>% filter(term=="d_neuro_1 ~~ sa06_01_t1"),
  params_lcs_neuro_ideal_hyp5 %>% filter(term=="d_neuro_1 ~~ sa06_01_t1"),
  params_lcs_neuro_curr_specif_hyp5 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_neuro_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_openn_curr_hyp5 %>% filter(term=="d_openn_1 ~~ sa06_01_t1"),
  params_lcs_openn_ideal_hyp5 %>% filter(term=="d_openn_1 ~~ sa06_01_t1"),
  params_lcs_openn_curr_specif_hyp5 %>% filter(term=="goals ~~ d_openn_1"),
  params_lcs_openn_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_openn_1"),
  #facets
  params_lcs_socia_curr_hyp5 %>% filter(term=="d_socia_1 ~~ sa06_01_t1"),
  params_lcs_socia_ideal_hyp5 %>% filter(term=="d_socia_1 ~~ sa06_01_t1"),
  params_lcs_socia_curr_specif_hyp5 %>% filter(term=="d_socia_1 ~~ sa07_01_t1"),
  params_lcs_socia_ideal_specif_hyp5 %>% filter(term=="d_socia_1 ~~ sa07_01_t1"),
  params_lcs_asser_curr_hyp5 %>% filter(term=="d_asser_1 ~~ sa06_01_t1"),
  params_lcs_asser_ideal_hyp5 %>% filter(term=="d_asser_1 ~~ sa06_01_t1"),
  params_lcs_asser_curr_specif_hyp5 %>% filter(term=="d_asser_1 ~~ sa07_02_t1"),
  params_lcs_asser_ideal_specif_hyp5 %>% filter(term=="d_asser_1 ~~ sa07_02_t1"),
  params_lcs_energ_curr_hyp5 %>% filter(term=="d_energ_1 ~~ sa06_01_t1"),
  params_lcs_energ_ideal_hyp5 %>% filter(term=="d_energ_1 ~~ sa06_01_t1"),
  params_lcs_energ_curr_specif_hyp5 %>% filter(term=="d_energ_1 ~~ sa07_03_t1"),
  params_lcs_energ_ideal_specif_hyp5 %>% filter(term=="d_energ_1 ~~ sa07_03_t1"),
  params_lcs_compa_curr_hyp5 %>% filter(term=="d_compa_1 ~~ sa06_01_t1"),
  params_lcs_compa_ideal_hyp5 %>% filter(term=="d_compa_1 ~~ sa06_01_t1"),
  params_lcs_compa_curr_specif_hyp5 %>% filter(term=="d_compa_1 ~~ sa07_04_t1"),
  params_lcs_compa_ideal_specif_hyp5 %>% filter(term=="d_compa_1 ~~ sa07_04_t1"),
  params_lcs_respe_curr_hyp5 %>% filter(term=="d_respe_1 ~~ sa06_01_t1"),
  params_lcs_respe_ideal_hyp5 %>% filter(term=="d_respe_1 ~~ sa06_01_t1"),
  params_lcs_respe_curr_specif_hyp5 %>% filter(term=="d_respe_1 ~~ sa07_05_t1"),
  params_lcs_respe_ideal_specif_hyp5 %>% filter(term=="d_respe_1 ~~ sa07_05_t1"),
  params_lcs_trust_curr_hyp5 %>% filter(term=="d_trust_1 ~~ sa06_01_t1"),
  params_lcs_trust_ideal_hyp5 %>% filter(term=="d_trust_1 ~~ sa06_01_t1"),
  params_lcs_trust_curr_specif_hyp5 %>% filter(term=="d_trust_1 ~~ sa07_06_t1"),
  params_lcs_trust_ideal_specif_hyp5 %>% filter(term=="d_trust_1 ~~ sa07_06_t1"),
  params_lcs_organ_curr_hyp5 %>% filter(term=="d_organ_1 ~~ sa06_01_t1"),
  params_lcs_organ_ideal_hyp5 %>% filter(term=="d_organ_1 ~~ sa06_01_t1"),
  params_lcs_organ_curr_specif_hyp5 %>% filter(term=="d_organ_1 ~~ sa07_07_t1"),
  params_lcs_organ_ideal_specif_hyp5 %>% filter(term=="d_organ_1 ~~ sa07_07_t1"),
  params_lcs_produ_curr_hyp5 %>% filter(term=="d_produ_1 ~~ sa06_01_t1"),
  params_lcs_produ_ideal_hyp5 %>% filter(term=="d_produ_1 ~~ sa06_01_t1"),
  params_lcs_produ_curr_specif_hyp5 %>% filter(term=="d_produ_1 ~~ sa07_08_t1"),
  params_lcs_produ_ideal_specif_hyp5 %>% filter(term=="d_produ_1 ~~ sa07_08_t1"),
  params_lcs_respo_curr_hyp5 %>% filter(term=="d_respo_1 ~~ sa06_01_t1"),
  params_lcs_respo_ideal_hyp5 %>% filter(term=="d_respo_1 ~~ sa06_01_t1"),
  params_lcs_respo_curr_specif_hyp5 %>% filter(term=="d_respo_1 ~~ sa07_09_t1"),
  params_lcs_respo_ideal_specif_hyp5 %>% filter(term=="d_respo_1 ~~ sa07_09_t1"),
  params_lcs_anxie_curr_hyp5 %>% filter(term=="d_anxie_1 ~~ sa06_01_t1"),
  params_lcs_anxie_ideal_hyp5 %>% filter(term=="d_anxie_1 ~~ sa06_01_t1"),
  params_lcs_anxie_curr_specif_hyp5 %>% filter(term=="d_anxie_1 ~~ sa07_10_t1"),
  params_lcs_anxie_ideal_specif_hyp5 %>% filter(term=="d_anxie_1 ~~ sa07_10_t1"),
  params_lcs_depre_curr_hyp5 %>% filter(term=="d_depre_1 ~~ sa06_01_t1"),
  params_lcs_depre_ideal_hyp5 %>% filter(term=="d_depre_1 ~~ sa06_01_t1"),
  params_lcs_depre_curr_specif_hyp5 %>% filter(term=="d_depre_1 ~~ sa07_11_t1"),
  params_lcs_depre_ideal_specif_hyp5 %>% filter(term=="d_depre_1 ~~ sa07_11_t1"),
  params_lcs_volat_curr_hyp5 %>% filter(term=="d_volat_1 ~~ sa06_01_t1"),
  params_lcs_volat_ideal_hyp5 %>% filter(term=="d_volat_1 ~~ sa06_01_t1"),
  params_lcs_volat_curr_specif_hyp5 %>% filter(term=="d_volat_1 ~~ sa07_12_t1"),
  params_lcs_volat_ideal_specif_hyp5 %>% filter(term=="d_volat_1 ~~ sa07_12_t1"),
  params_lcs_curio_curr_hyp5 %>% filter(term=="d_curio_1 ~~ sa06_01_t1"),
  params_lcs_curio_ideal_hyp5 %>% filter(term=="d_curio_1 ~~ sa06_01_t1"),
  params_lcs_curio_curr_specif_hyp5 %>% filter(term=="d_curio_1 ~~ sa07_13_t1"),
  params_lcs_curio_ideal_specif_hyp5 %>% filter(term=="d_curio_1 ~~ sa07_13_t1"),
  params_lcs_aesth_curr_hyp5 %>% filter(term=="d_aesth_1 ~~ sa06_01_t1"),
  params_lcs_aesth_ideal_hyp5 %>% filter(term=="d_aesth_1 ~~ sa06_01_t1"),
  params_lcs_aesth_curr_specif_hyp5 %>% filter(term=="d_aesth_1 ~~ sa07_14_t1"),
  params_lcs_aesth_ideal_specif_hyp5 %>% filter(term=="d_aesth_1 ~~ sa07_14_t1"),
  params_lcs_imagi_curr_hyp5 %>% filter(term=="d_imagi_1 ~~ sa06_01_t1"),
  params_lcs_imagi_ideal_hyp5 %>% filter(term=="d_imagi_1 ~~ sa06_01_t1"),
  params_lcs_imagi_curr_specif_hyp5 %>% filter(term=="d_imagi_1 ~~ sa07_15_t1"),
  params_lcs_imagi_ideal_specif_hyp5 %>% filter(term=="d_imagi_1 ~~ sa07_15_t1"),
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=4),
         ref = rep(rep(c("current", "ideal"), 2), 20),
         goal = rep(c(rep("general", 2), rep("specific", 2)), 20)) %>% 
  select(trait, ref, goal, estimate, std.all, statistic, p.value)

Results summary across the Big Five traits: covariance of the latent change score and acceptance goal(s)

kable(df_table_hyp5[1:20, ], digits = 3)
trait ref goal estimate std.all statistic p.value
extraversion current general 0.009 0.035 0.446 0.656
extraversion ideal general 0.018 0.070 0.778 0.437
extraversion current specific -0.026 -0.147 -1.181 0.237
extraversion ideal specific -0.008 -0.048 -0.443 0.658
agreeableness current general -0.009 -0.042 -0.605 0.545
agreeableness ideal general 0.000 -0.001 -0.020 0.984
agreeableness current specific -0.041 -0.296 -2.392 0.017
agreeableness ideal specific -0.017 -0.094 -1.087 0.277
conscientiousness current general -0.035 -0.101 -1.418 0.156
conscientiousness ideal general 0.019 0.060 1.044 0.297
conscientiousness current specific -0.043 -0.159 -1.707 0.088
conscientiousness ideal specific -0.035 -0.148 -2.036 0.042
neuroticism current general -0.026 -0.070 -1.082 0.279
neuroticism ideal general -0.018 -0.050 -0.681 0.496
neuroticism current specific 0.045 0.178 2.121 0.034
neuroticism ideal specific 0.002 0.009 0.116 0.908
openness current general -0.016 -0.065 -0.794 0.427
openness ideal general -0.028 -0.132 -1.941 0.052
openness current specific -0.018 -0.126 -1.099 0.272
openness ideal specific -0.018 -0.140 -2.101 0.036

Four covariances significantly differ from zero (at p < .05):

  • changes in current-level agreeableness covary with the specific acceptance goals (latent factor of the three A facets)
  • changes in ideal-level conscientiousness covary with the specific acceptance goals (latent factor of the three C facets)
    changes in current-level neuroticism covary with the specific acceptance goals (latent factor of the three N facets)
  • changes in ideal-level openness covary with the specific acceptance goals (latent factor of the three O facets)

-> unexpected direction of effects!

Results summary across the Big Five facets: covariance of the latent change score and acceptance goal(s)

kable(df_table_hyp5[21:80, ], digits = 3)
trait ref goal estimate std.all statistic p.value
sociability current general 0.036 0.083 0.879 0.379
sociability ideal general -0.022 -0.118 -0.742 0.458
sociability current specific -0.049 -0.108 -1.284 0.199
sociability ideal specific -0.043 -0.239 -1.742 0.082
assertiveness current general -0.011 -0.040 -0.457 0.648
assertiveness ideal general 0.040 0.239 1.826 0.068
assertiveness current specific -0.005 -0.017 -0.164 0.870
assertiveness ideal specific 0.045 0.272 1.817 0.069
energy current general -0.003 -0.018 -0.245 0.806
energy ideal general 0.010 0.062 0.781 0.435
energy current specific -0.028 -0.146 -1.415 0.157
energy ideal specific 0.005 0.032 0.398 0.690
compassion current general -0.043 -0.111 -1.236 0.216
compassion ideal general -0.005 -0.014 -0.138 0.890
compassion current specific -0.092 -0.226 -2.053 0.040
compassion ideal specific -0.042 -0.111 -1.036 0.300
respectfulness current general -0.007 -0.022 -0.308 0.758
respectfulness ideal general -0.004 -0.029 -0.209 0.834
respectfulness current specific -0.147 -0.402 -3.818 0.000
respectfulness ideal specific -0.023 -0.152 -0.984 0.325
trust current general 0.008 0.038 0.283 0.777
trust ideal general 0.009 0.034 0.371 0.710
trust current specific 0.040 0.193 1.108 0.268
trust ideal specific 0.018 0.066 0.629 0.529
organization current general -0.083 -0.178 -2.143 0.032
organization ideal general -0.003 -0.013 -0.139 0.889
organization current specific -0.148 -0.286 -3.323 0.001
organization ideal specific -0.035 -0.134 -1.259 0.208
productiveness current general -0.035 -0.090 -1.111 0.267
productiveness ideal general 0.006 0.027 0.374 0.708
productiveness current specific -0.073 -0.177 -1.833 0.067
productiveness ideal specific -0.036 -0.153 -1.789 0.074
responsibility current general -0.011 -0.058 -0.668 0.504
responsibility ideal general 0.039 0.143 1.685 0.092
responsibility current specific -0.034 -0.173 -1.505 0.132
responsibility ideal specific -0.041 -0.152 -1.689 0.091
anxiety current general -0.031 -0.074 -0.778 0.437
anxiety ideal general -0.014 -0.055 -0.469 0.639
anxiety current specific 0.113 0.258 2.652 0.008
anxiety ideal specific 0.009 0.035 0.387 0.698
depression current general -0.007 -0.024 -0.327 0.744
depression ideal general -0.003 -0.010 -0.106 0.916
depression current specific 0.044 0.149 1.847 0.065
depression ideal specific 0.006 0.021 0.259 0.795
volatility current general 0.017 0.041 0.444 0.657
volatility ideal general -0.032 -0.123 -1.124 0.261
volatility current specific 0.035 0.084 0.789 0.430
volatility ideal specific -0.009 -0.037 -0.383 0.701
curiosity current general -0.001 -0.005 -0.027 0.978
curiosity ideal general -0.036 -0.175 -1.739 0.082
curiosity current specific 0.017 0.149 0.819 0.413
curiosity ideal specific -0.014 -0.070 -0.648 0.517
aesthetic current general -0.005 -0.038 -0.383 0.701
aesthetic ideal general -0.009 -0.055 -0.716 0.474
aesthetic current specific -0.030 -0.226 -1.986 0.047
aesthetic ideal specific -0.015 -0.089 -1.088 0.277
imagination current general -0.009 -0.034 -0.366 0.715
imagination ideal general -0.042 -0.129 -1.664 0.096
imagination current specific -0.053 -0.182 -1.696 0.090
imagination ideal specific -0.054 -0.159 -1.809 0.070

Looking at the facets, we find five covariances that significantly differ from zero at p < .05 (relatively unsystematic across facets / current-ideal / goal dimension):
- Changes in current-level compassion and respectfulness covary with the respective facet-specific acceptance goal.
- Further, changes in current-level organization covary with the general acceptance goal and the specific facet acceptance goal.
- Changes in current-level anxiety covary with the specific facet acceptance goal.

Prepare data frame for plotting:

Show the code
df_table_hyp5_plot <- bind_rows(
  #traits
  params_lcs_extra_curr_hyp5 %>% filter(term=="d_extra_1 ~~ sa06_01_t1"),
  params_lcs_extra_ideal_hyp5 %>% filter(term=="d_extra_1 ~~ sa06_01_t1"),
  params_lcs_extra_curr_specif_hyp5 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_extra_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_agree_curr_hyp5 %>% filter(term=="d_agree_1 ~~ sa06_01_t1"),
  params_lcs_agree_ideal_hyp5 %>% filter(term=="d_agree_1 ~~ sa06_01_t1"),
  params_lcs_agree_curr_specif_hyp5 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_agree_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_consc_curr_hyp5 %>% filter(term=="d_consc_1 ~~ sa06_01_t1"),
  params_lcs_consc_ideal_hyp5 %>% filter(term=="d_consc_1 ~~ sa06_01_t1"),
  params_lcs_consc_curr_specif_hyp5 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_consc_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_neuro_curr_hyp5 %>% filter(term=="d_neuro_1 ~~ sa06_01_t1"),
  params_lcs_neuro_ideal_hyp5 %>% filter(term=="d_neuro_1 ~~ sa06_01_t1"),
  params_lcs_neuro_curr_specif_hyp5 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_neuro_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_openn_curr_hyp5 %>% filter(term=="d_openn_1 ~~ sa06_01_t1"),
  params_lcs_openn_ideal_hyp5 %>% filter(term=="d_openn_1 ~~ sa06_01_t1"),
  params_lcs_openn_curr_specif_hyp5 %>% filter(term=="goals ~~ d_openn_1"),
  params_lcs_openn_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_openn_1"),
  #facets
  params_lcs_socia_curr_hyp5 %>% filter(term=="d_socia_1 ~~ sa06_01_t1"),
  params_lcs_socia_ideal_hyp5 %>% filter(term=="d_socia_1 ~~ sa06_01_t1"),
  params_lcs_socia_curr_specif_hyp5 %>% filter(term=="d_socia_1 ~~ sa07_01_t1"),
  params_lcs_socia_ideal_specif_hyp5 %>% filter(term=="d_socia_1 ~~ sa07_01_t1"),
  params_lcs_asser_curr_hyp5 %>% filter(term=="d_asser_1 ~~ sa06_01_t1"),
  params_lcs_asser_ideal_hyp5 %>% filter(term=="d_asser_1 ~~ sa06_01_t1"),
  params_lcs_asser_curr_specif_hyp5 %>% filter(term=="d_asser_1 ~~ sa07_02_t1"),
  params_lcs_asser_ideal_specif_hyp5 %>% filter(term=="d_asser_1 ~~ sa07_02_t1"),
  params_lcs_energ_curr_hyp5 %>% filter(term=="d_energ_1 ~~ sa06_01_t1"),
  params_lcs_energ_ideal_hyp5 %>% filter(term=="d_energ_1 ~~ sa06_01_t1"),
  params_lcs_energ_curr_specif_hyp5 %>% filter(term=="d_energ_1 ~~ sa07_03_t1"),
  params_lcs_energ_ideal_specif_hyp5 %>% filter(term=="d_energ_1 ~~ sa07_03_t1"),
  params_lcs_compa_curr_hyp5 %>% filter(term=="d_compa_1 ~~ sa06_01_t1"),
  params_lcs_compa_ideal_hyp5 %>% filter(term=="d_compa_1 ~~ sa06_01_t1"),
  params_lcs_compa_curr_specif_hyp5 %>% filter(term=="d_compa_1 ~~ sa07_04_t1"),
  params_lcs_compa_ideal_specif_hyp5 %>% filter(term=="d_compa_1 ~~ sa07_04_t1"),
  params_lcs_respe_curr_hyp5 %>% filter(term=="d_respe_1 ~~ sa06_01_t1"),
  params_lcs_respe_ideal_hyp5 %>% filter(term=="d_respe_1 ~~ sa06_01_t1"),
  params_lcs_respe_curr_specif_hyp5 %>% filter(term=="d_respe_1 ~~ sa07_05_t1"),
  params_lcs_respe_ideal_specif_hyp5 %>% filter(term=="d_respe_1 ~~ sa07_05_t1"),
  params_lcs_trust_curr_hyp5 %>% filter(term=="d_trust_1 ~~ sa06_01_t1"),
  params_lcs_trust_ideal_hyp5 %>% filter(term=="d_trust_1 ~~ sa06_01_t1"),
  params_lcs_trust_curr_specif_hyp5 %>% filter(term=="d_trust_1 ~~ sa07_06_t1"),
  params_lcs_trust_ideal_specif_hyp5 %>% filter(term=="d_trust_1 ~~ sa07_06_t1"),
  params_lcs_organ_curr_hyp5 %>% filter(term=="d_organ_1 ~~ sa06_01_t1"),
  params_lcs_organ_ideal_hyp5 %>% filter(term=="d_organ_1 ~~ sa06_01_t1"),
  params_lcs_organ_curr_specif_hyp5 %>% filter(term=="d_organ_1 ~~ sa07_07_t1"),
  params_lcs_organ_ideal_specif_hyp5 %>% filter(term=="d_organ_1 ~~ sa07_07_t1"),
  params_lcs_produ_curr_hyp5 %>% filter(term=="d_produ_1 ~~ sa06_01_t1"),
  params_lcs_produ_ideal_hyp5 %>% filter(term=="d_produ_1 ~~ sa06_01_t1"),
  params_lcs_produ_curr_specif_hyp5 %>% filter(term=="d_produ_1 ~~ sa07_08_t1"),
  params_lcs_produ_ideal_specif_hyp5 %>% filter(term=="d_produ_1 ~~ sa07_08_t1"),
  params_lcs_respo_curr_hyp5 %>% filter(term=="d_respo_1 ~~ sa06_01_t1"),
  params_lcs_respo_ideal_hyp5 %>% filter(term=="d_respo_1 ~~ sa06_01_t1"),
  params_lcs_respo_curr_specif_hyp5 %>% filter(term=="d_respo_1 ~~ sa07_09_t1"),
  params_lcs_respo_ideal_specif_hyp5 %>% filter(term=="d_respo_1 ~~ sa07_09_t1"),
  params_lcs_anxie_curr_hyp5 %>% filter(term=="d_anxie_1 ~~ sa06_01_t1"),
  params_lcs_anxie_ideal_hyp5 %>% filter(term=="d_anxie_1 ~~ sa06_01_t1"),
  params_lcs_anxie_curr_specif_hyp5 %>% filter(term=="d_anxie_1 ~~ sa07_10_t1"),
  params_lcs_anxie_ideal_specif_hyp5 %>% filter(term=="d_anxie_1 ~~ sa07_10_t1"),
  params_lcs_depre_curr_hyp5 %>% filter(term=="d_depre_1 ~~ sa06_01_t1"),
  params_lcs_depre_ideal_hyp5 %>% filter(term=="d_depre_1 ~~ sa06_01_t1"),
  params_lcs_depre_curr_specif_hyp5 %>% filter(term=="d_depre_1 ~~ sa07_11_t1"),
  params_lcs_depre_ideal_specif_hyp5 %>% filter(term=="d_depre_1 ~~ sa07_11_t1"),
  params_lcs_volat_curr_hyp5 %>% filter(term=="d_volat_1 ~~ sa06_01_t1"),
  params_lcs_volat_ideal_hyp5 %>% filter(term=="d_volat_1 ~~ sa06_01_t1"),
  params_lcs_volat_curr_specif_hyp5 %>% filter(term=="d_volat_1 ~~ sa07_12_t1"),
  params_lcs_volat_ideal_specif_hyp5 %>% filter(term=="d_volat_1 ~~ sa07_12_t1"),
  params_lcs_curio_curr_hyp5 %>% filter(term=="d_curio_1 ~~ sa06_01_t1"),
  params_lcs_curio_ideal_hyp5 %>% filter(term=="d_curio_1 ~~ sa06_01_t1"),
  params_lcs_curio_curr_specif_hyp5 %>% filter(term=="d_curio_1 ~~ sa07_13_t1"),
  params_lcs_curio_ideal_specif_hyp5 %>% filter(term=="d_curio_1 ~~ sa07_13_t1"),
  params_lcs_aesth_curr_hyp5 %>% filter(term=="d_aesth_1 ~~ sa06_01_t1"),
  params_lcs_aesth_ideal_hyp5 %>% filter(term=="d_aesth_1 ~~ sa06_01_t1"),
  params_lcs_aesth_curr_specif_hyp5 %>% filter(term=="d_aesth_1 ~~ sa07_14_t1"),
  params_lcs_aesth_ideal_specif_hyp5 %>% filter(term=="d_aesth_1 ~~ sa07_14_t1"),
  params_lcs_imagi_curr_hyp5 %>% filter(term=="d_imagi_1 ~~ sa06_01_t1"),
  params_lcs_imagi_ideal_hyp5 %>% filter(term=="d_imagi_1 ~~ sa06_01_t1"),
  params_lcs_imagi_curr_specif_hyp5 %>% filter(term=="d_imagi_1 ~~ sa07_15_t1"),
  params_lcs_imagi_ideal_specif_hyp5 %>% filter(term=="d_imagi_1 ~~ sa07_15_t1"),
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=4),
         ref = rep(rep(c("current", "ideal"), 2), 20),
         goal = rep(c(rep("general", 2), rep("specific", 2)), 20)) %>% 
  select(trait, ref, goal, estimate, conf.low, conf.high, std.all, statistic, p.value)

df_table_hyp5_plot <- df_table_hyp5_plot %>% 
  mutate(include_0 = ifelse(conf.low < 0 & conf.high > 0, "n.s.", "*")) %>% 
  mutate(ref = factor(ref, levels = c("current", "ideal"), labels = c("current", "ideal"))) %>% 
  mutate(goal = factor(goal, levels = c("general", "specific"), labels = c("general", "specific"))) %>% 
  mutate(trait = factor(trait, levels = names(b5_vars), labels = names(b5_vars)))

Plotting the effect size across all analyses:

  • current = current-level personality
  • ideal = ideal-level personality
  • general = general acceptance goal
  • specific = specific, facet-level acceptance goal(s)
Show the code
ggplot(df_table_hyp5_plot, aes(x = fct_rev(trait), y = estimate, color = include_0)) +
  geom_hline(yintercept=0, linetype = 3) +
  geom_point(size=3, position=position_dodge(0.4)) + 
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high, color = include_0), width=.2, position=position_dodge(0.4)) +
  scale_color_manual(values = c("#000000","#A9A9A9")) +   
  facet_wrap( ~ ref + goal, ncol = 2) +
  theme_bw() +
  scale_shape_manual(values=c(18)) + 
  ylab("Effect Estimates (99.9% / 95% CI)") +
  xlab("") +
  theme(legend.title=element_blank()) +
  theme(legend.text=element_text(size=12)) +
  coord_flip() +
  theme(strip.text.x = element_text(size = 12)) +
  theme(axis.text.x=element_text(size=10, angle = 45, hjust = 1), axis.text.y=element_text(size=12)) + 
  guides(color="none")

6.6 H6: Desire to change and frequency of self-improvement behaviors as moderators of change in personality in self-improvement group (H2 in paper)

In the self-improvement group, change in current-personality ratings but not change in ideal-personality ratings will be moderated by change goals (both general and trait-/facet-specific goals) and the frequency of self-improvement behaviors.

We will test this one domain/facet at a time. To test this hypothesis, we will estimate the mean-level difference across time for both current and ideal trait ratings using latent change models and specify change goals (or the frequency of self-improvement behaviors) as a moderator of latent trait change. We will check in a second set of models whether changes in current-personality ratings persist from T2 to T3.

Reshape and split data set by intervention group:

Show the code
# from T1 to T2
df_sbsa2_wide_pers_sb_mod <- df_sbsa2 %>% 
  filter(rando=="Self-Improvement" & time %in% c(1,2)) %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sb07", # facet-specific change goals
                                  "sb04"))) %>% # frequency self-improvement behaviors
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with(c("sb07", "sb04")))) %>% 
  select(-c(sb07_01_t2, sb07_02_t2, sb07_03_t2, sb07_04_t2, sb07_05_t2, 
            sb07_06_t2, sb07_07_t2, sb07_08_t2, sb07_09_t2, sb07_10_t2, 
            sb07_11_t2, sb07_12_t2, sb07_13_t2, sb07_14_t2, sb07_15_t2, 
            sb04_01_t1, sb04_02_t1, sb04_03_t1)) # frequency of self-improvement behaviors measured at T2
# standardize goal variables (better interpretation for when they are in SEM as a single manifest variable, not so much a problem when they form a latent scale)
df_sbsa2_wide_pers_sb_mod <- df_sbsa2_wide_pers_sb_mod %>% 
  mutate_at(c(colnames(df_sbsa2_wide_pers_sb_mod)[-1]), ~(scale(.) %>% as.vector)) 
# colnames(df_sbsa2_wide_pers_sb_mod)

group_assign <- df_sbsa2 %>% select(pid, rando) %>% unique()

df_sbsa2_wide_pers_sb_mod <- df_sbsa2_wide_pers %>% left_join(group_assign) %>% 
  filter(rando=="Self-Improvement") %>% select(-rando, -ends_with("_t3")) %>%
  left_join(df_sbsa2_wide_pers_sb_mod)

# follow-up, from T2 to T3
df_sbsa2_wide_pers_sb_mod_fu <- df_sbsa2 %>% 
  filter(rando=="Self-Improvement" & time %in% c(1,2)) %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sb07", # facet-specific change goals -> asked at T1
                                  "sb04"))) %>% # frequency self-improvement behaviors -> asked at T2
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with(c("sb07", "sb04")))) %>% 
  select(-c(sb07_01_t2, sb07_02_t2, sb07_03_t2, sb07_04_t2, sb07_05_t2, 
            sb07_06_t2, sb07_07_t2, sb07_08_t2, sb07_09_t2, sb07_10_t2, 
            sb07_11_t2, sb07_12_t2, sb07_13_t2, sb07_14_t2, sb07_15_t2, 
            sb04_01_t1, sb04_02_t1, sb04_03_t1)) # frequency of self-improvement behaviors measured at T2
# standardize goal variables (better interpretation for when they are in SEM as a single manifest variable, not so much a problem when they form a latent scale)
df_sbsa2_wide_pers_sb_mod_fu <- df_sbsa2_wide_pers_sb_mod_fu %>% 
  mutate_at(c(colnames(df_sbsa2_wide_pers_sb_mod_fu)[-1]), ~(scale(.) %>% as.vector)) 
# colnames(df_sbsa2_wide_pers_sb_mod_fu)

df_sbsa2_wide_pers_sb_mod_fu <- df_sbsa2_wide_pers %>% left_join(group_assign) %>% 
  filter(rando=="Self-Improvement" & !is.na(valid_t2)) %>% select(-rando, -ends_with("_t1")) %>%
  left_join(df_sbsa2_wide_pers_sb_mod_fu)

6.6.1 Big Five traits (run models)

Run models for all traits with templates & loops:

Show the code
# create templates:

# 1st, for facet-specific change goals

trait_template_mod_goal <- '
trait_t1 =~ 1*ind01_t1 + lamb2*ind02_t1 + lamb3*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

goals =~ 1*ind_goal_1 + ind_goal_2 + ind_goal_3 # latent variable for moderator

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t1 ~ 1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ trait_t1         # This estimates the variance of trait_t1 
trait_t1 ~~ d_trait_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
trait_t1 ~ goals           # This estimates the moderation effect on personality at T1
d_trait_1 ~ goals          # This estimates the moderation effect on the change score

goals ~ 0*1            # This fixes the intercept of the moderator to 0
goals ~~ goals         # This estimates the variance of the moderator

ind01_t1 ~~ ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ res1*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ res2*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ res3*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ res1*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ res3*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ m3*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

ind_goal_1 ~~ ind_goal_1
ind_goal_2 ~~ ind_goal_2
ind_goal_3 ~~ ind_goal_3

ind_goal_1 ~ 1
ind_goal_2 ~ 1
ind_goal_3 ~ 1
'

trait_facets_nrs <- list(a1 = c(1:3), b2 = c(4:6), c3 = c(7:9), d4 = c(10:12), e5 = c(13:15)) # matching facet nrs to traits 

# loop across 5 traits -> change in current-personality ratings
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  # items = paste0(bfi_versions[[5]], item_nrs) # using parcels instead!
  mod_names = paste0("sb07_", str_pad(trait_facets_nrs[[i]], 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(trait_template_mod_goal, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3"), 
                                         "ind_goal_1" = mod_names[1], "ind_goal_2" = mod_names[2], 
                                         "ind_goal_3" = mod_names[3]))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp6")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp6")), trait_model_fit))
}  

# loop across 5 traits -> change in *ideal*-self ratings (not hypothesis-conform)
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  # items = paste0(bfi_versions[[5]], item_nrs) # using parcels instead!
  mod_names = paste0("sb07_", str_pad(trait_facets_nrs[[i]], 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(trait_template_mod_goal, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), # ideal instead of current!
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3"), 
                                         "ind_goal_1" = mod_names[1], "ind_goal_2" = mod_names[2], 
                                         "ind_goal_3" = mod_names[3]))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp6")), template_filled)) # ideal instead of curr
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp6")), trait_model_fit))
}  

# we also need separate models for follow-up (fu), that is, changes from T2 to T3 (only for current personality ratings)

trait_template_mod_goal_fu <- '
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for trait_t2 
trait_t3 =~ 1*ind01_t3 + lamb2*ind02_t3 + lamb3*ind03_t3 # This specifies the measurement model for trait_t3 with the equality constrained factor loadings

goals =~ 1*ind_goal_1 + ind_goal_2 + ind_goal_3 # latent variable for moderator

trait_t3 ~ 1*trait_t2     # This parameter regresses trait_t3 perfectly on trait_t2
d_trait_1 =~ 1*trait_t3   # This defines the latent change score factor as measured perfectly by scores on trait_t3
trait_t3 ~ 0*1            # This line constrains the intercept of trait_t3 to 0
trait_t3 ~~ 0*trait_t3    # This fixes the variance of trait_t3 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t2 ~ 1               # This estimates the intercept of trait_t2 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t2 ~~ trait_t2         # This estimates the variance of trait_t2 
trait_t2 ~~ d_trait_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
trait_t2 ~ goals           # This estimates the moderation effect on personality at T2
d_trait_1 ~ goals          # This estimates the moderation effect on the change score

goals ~ 0*1            # This fixes the intercept of the moderator to 0
goals ~~ goals         # This estimates the variance of the moderator

ind01_t2 ~~ ind01_t3   # This allows residual covariance on indicator X1 across T2 and T3
ind02_t2 ~~ ind02_t3   # This allows residual covariance on indicator X2 across T2 and T3
ind03_t2 ~~ ind03_t3   # This allows residual covariance on indicator X3 across T2 and T3

ind01_t2 ~~ res1*ind01_t2   # This allows residual variance on indicator X1 at T2
ind02_t2 ~~ res2*ind02_t2   # This allows residual variance on indicator X2 at T2
ind03_t2 ~~ res3*ind03_t2   # This allows residual variance on indicator X3 at T2

ind01_t3 ~~ res1*ind01_t3  # This allows residual variance on indicator X1 at T3 
ind02_t3 ~~ res2*ind02_t3  # This allows residual variance on indicator X2 at T3 
ind03_t3 ~~ res3*ind03_t3  # This allows residual variance on indicator X3 at T3

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

ind01_t3 ~ 0*1      # This constrains the intercept of X1 to 0 at T3
ind02_t3 ~ m2*1     # This estimates the intercept of X2 at T3
ind03_t3 ~ m3*1     # This estimates the intercept of X3 at T3

ind_goal_1 ~~ ind_goal_1
ind_goal_2 ~~ ind_goal_2
ind_goal_3 ~~ ind_goal_3

ind_goal_1 ~ 1
ind_goal_2 ~ 1
ind_goal_3 ~ 1
'

# loop across 5 traits -> change in current-personality ratings
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  # items = paste0(bfi_versions[[5]], item_nrs) # using parcels instead!
  mod_names = paste0("sb07_", str_pad(trait_facets_nrs[[i]], 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(trait_template_mod_goal_fu, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3"), 
                                         "ind_goal_1" = mod_names[1], "ind_goal_2" = mod_names[2], 
                                         "ind_goal_3" = mod_names[3]))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb_mod_fu, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp6_fu")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp6_fu")), trait_model_fit))
}  

# 2nd, for frequency of self-improvement behavior

trait_template_mod_frequ <- '
trait_t1 =~ 1*ind01_t1 + lamb2*ind02_t1 + lamb3*ind03_t1 # This specifies the measurement model for extra_t1 
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

frequ =~ 1*sb04_01_t2 + sb04_02_t2 + sb04_03_t2 # latent variable for moderator

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t1 ~ 1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ trait_t1         # This estimates the variance of trait_t1 
trait_t1 ~~ d_trait_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
trait_t1 ~ frequ           # This estimates the moderation effect on personality at T1
d_trait_1 ~ frequ          # This estimates the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

ind01_t1 ~~ ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ res1*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ res2*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ res3*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ res1*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ res3*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ m3*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb04_01_t2 ~~ sb04_01_t2
sb04_02_t2 ~~ sb04_02_t2
sb04_03_t2 ~~ sb04_03_t2

sb04_01_t2 ~ 1
sb04_02_t2 ~ 1
sb04_03_t2 ~ 1
'

# loop across 5 traits
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  # items = paste0(bfi_versions[[5]], item_nrs) # using parcels instead!
  template_filled <- str_replace_all(trait_template_mod_frequ, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp6")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp6")), trait_model_fit))
}  

# loop across 5 traits -> change in *ideal*-self ratings (not hypothesis-conform)
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  # items = paste0(bfi_versions[[5]], item_nrs) # using parcels instead!
  template_filled <- str_replace_all(trait_template_mod_frequ, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"),  # ideal instead of current!
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp6")), template_filled)) # ideal instead of curr
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp6")), trait_model_fit))
}  

# we also need separate models for follow-up (fu), that is, changes from T2 to T3 (only for current personality ratings)

trait_template_mod_frequ_fu <- '
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for extra_t2 
trait_t3 =~ 1*ind01_t3 + lamb2*ind02_t3 + lamb3*ind03_t3 # This specifies the measurement model for extra_t3 with the equality constrained factor loadings

frequ =~ 1*sb04_01_t2 + sb04_02_t2 + sb04_03_t2 # latent variable for moderator

trait_t3 ~ 1*trait_t2     # This parameter regresses trait_t3 perfectly on trait_t2
d_trait_1 =~ 1*trait_t3   # This defines the latent change score factor as measured perfectly by scores on trait_t3
trait_t3 ~ 0*1            # This line constrains the intercept of trait_t3 to 0
trait_t3 ~~ 0*trait_t3    # This fixes the variance of trait_t3 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t2 ~ 1               # This estimates the intercept of trait_t2 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t2 ~~ trait_t2         # This estimates the variance of trait_t2 
trait_t2 ~~ d_trait_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
trait_t2 ~ frequ           # This estimates the moderation effect on personality at T2
d_trait_1 ~ frequ          # This estimates the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

ind01_t2 ~~ ind01_t3   # This allows residual covariance on indicator X1 across T2 and T3
ind02_t2 ~~ ind02_t3   # This allows residual covariance on indicator X2 across T2 and T3
ind03_t2 ~~ ind03_t3   # This allows residual covariance on indicator X3 across T2 and T3

ind01_t2 ~~ res1*ind01_t2   # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2   # This allows residual variance on indicator X2 at T2
ind03_t2 ~~ res3*ind03_t2   # This allows residual variance on indicator X3 at T2

ind01_t3 ~~ res1*ind01_t3  # This allows residual variance on indicator X1 at T3 
ind02_t3 ~~ res2*ind02_t3  # This allows residual variance on indicator X2 at T3 
ind03_t3 ~~ res3*ind03_t3  # This allows residual variance on indicator X3 at T3

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

ind01_t3 ~ 0*1      # This constrains the intercept of X1 to 0 at T3
ind02_t3 ~ m2*1     # This estimates the intercept of X2 at T3
ind03_t3 ~ m3*1     # This estimates the intercept of X3 at T3

sb04_01_t2 ~~ sb04_01_t2
sb04_02_t2 ~~ sb04_02_t2
sb04_03_t2 ~~ sb04_03_t2

sb04_01_t2 ~ 1
sb04_02_t2 ~ 1
sb04_03_t2 ~ 1
'

# loop across 5 traits
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  # items = paste0(bfi_versions[[5]], item_nrs) # using parcels instead!
  template_filled <- str_replace_all(trait_template_mod_frequ_fu, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb_mod_fu, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp6_fu")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp6_fu")), trait_model_fit))
}  

6.6.2 Big Five traits (current personality)

6.6.2.1 Extraversion: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 6401.657 6501.056 0.941 0.088 0.049
# parameters of interest
params_lcs_extra_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_extra_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>% 
  left_join(broom::tidy(fit_mi_lcs_extra_curr_specif_hyp6, 
                        conf.int = TRUE, conf.level = 0.95) %>% 
              select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ goals", "goals ~~ goals", "extra_t1 ~ goals", # change goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
Joining with `by = join_by(term)`
kable(params_lcs_extra_curr_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.080 NA NA 1.000 1.000
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.525 NA NA 1.000 1.000
d_extra_1 ~1 0.098 0.006 0.189 0.335 3.513 0.000 0.043 0.152
extra_t1 ~1 2.987 2.842 3.132 4.990 67.877 0.000 2.901 3.073
d_extra_1 ~~ d_extra_1 0.082 0.013 0.151 0.970 3.905 0.000 0.041 0.123
extra_t1 ~~ d_extra_1 -0.046 -0.108 0.016 -0.389 -2.445 0.014 -0.083 -0.009
extra_t1 ~ goals -0.732 -1.213 -0.252 -0.725 -5.019 0.000 -1.018 -0.446
d_extra_1 ~ goals 0.085 -0.137 0.307 0.173 1.255 0.209 -0.048 0.217
goals ~~ goals 0.351 0.072 0.630 1.000 4.145 0.000 0.185 0.517

The moderation effect of specific, facet-level change goals with the extraversion change score (current-personality) is not significantly different from zero, b = 0.085, p = 0.209.

6.6.2.2 Extraversion: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5910.945 6010.344 0.972 0.062 0.043
# parameters of interest
params_lcs_extra_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_extra_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_extra_curr_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ frequ", "frequ ~~ frequ", "extra_t1 ~ frequ", # frequency of self improvement
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
Joining with `by = join_by(term)`
kable(params_lcs_extra_curr_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.080 NA NA 1.000 1.000
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.524 NA NA 1.000 1.000
d_extra_1 ~1 0.096 0.004 0.189 0.333 3.432 0.001 0.041 0.152
extra_t1 ~1 2.987 2.843 3.132 5.000 67.984 0.000 2.901 3.073
d_extra_1 ~~ d_extra_1 0.078 0.011 0.146 0.930 3.833 0.000 0.038 0.118
extra_t1 ~~ d_extra_1 -0.070 -0.132 -0.007 -0.418 -3.674 0.000 -0.107 -0.033
extra_t1 ~ frequ 0.045 -0.181 0.271 0.051 0.651 0.515 -0.090 0.179
d_extra_1 ~ frequ 0.113 -0.020 0.246 0.265 2.802 0.005 0.034 0.192
frequ ~~ frequ 0.462 0.188 0.736 1.000 5.553 0.000 0.299 0.625

The frequency of self-improvement behaviors significantly moderates changes in extraversion (current-personality), b = 0.113, p = 0.005.

6.6.2.3 Agreeableness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5626.258 5725.657 1 0 0.033
# parameters of interest
params_lcs_agree_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_agree_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_agree_curr_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ goals", "goals ~~ goals", "agree_t1 ~ goals", # change goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
Joining with `by = join_by(term)`
kable(params_lcs_agree_curr_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.074 NA NA 1.000 1.000
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.535 NA NA 1.000 1.000
d_agree_1 ~1 0.020 -0.039 0.080 0.100 1.123 0.261 -0.015 0.056
agree_t1 ~1 3.463 3.349 3.577 8.489 99.804 0.000 3.395 3.531
d_agree_1 ~~ d_agree_1 0.040 -0.001 0.082 0.981 3.173 0.002 0.015 0.065
agree_t1 ~~ d_agree_1 -0.028 -0.063 0.008 -0.360 -2.587 0.010 -0.049 -0.007
agree_t1 ~ goals -0.198 -0.365 -0.031 -0.330 -3.911 0.000 -0.298 -0.099
d_agree_1 ~ goals 0.042 -0.067 0.150 0.139 1.267 0.205 -0.023 0.106
goals ~~ goals 0.461 0.194 0.727 1.000 5.688 0.000 0.302 0.620

The moderation effect of specific, facet-level change goals with the agreeableness change score (current-personality) is not significantly different from zero, b = 0.042, p = 0.205.

6.6.2.4 Agreeableness: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5234.839 5334.238 0.989 0.033 0.041
# parameters of interest
params_lcs_agree_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_agree_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_agree_curr_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ frequ", "frequ ~~ frequ", "agree_t1 ~ frequ", # frequency of self improvement
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
Joining with `by = join_by(term)`
kable(params_lcs_agree_curr_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.086 NA NA 1.000 1.000
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.540 NA NA 1.000 1.000
d_agree_1 ~1 0.022 -0.043 0.086 0.101 1.106 0.269 -0.017 0.060
agree_t1 ~1 3.462 3.347 3.577 8.023 99.324 0.000 3.394 3.530
d_agree_1 ~~ d_agree_1 0.046 -0.001 0.093 0.998 3.198 0.001 0.018 0.074
agree_t1 ~~ d_agree_1 -0.038 -0.079 0.002 -0.436 -3.093 0.002 -0.063 -0.014
agree_t1 ~ frequ 0.192 -0.002 0.386 0.307 3.264 0.001 0.077 0.308
d_agree_1 ~ frequ 0.013 -0.100 0.125 0.040 0.367 0.714 -0.054 0.079
frequ ~~ frequ 0.475 0.201 0.750 1.000 5.709 0.000 0.312 0.639

The moderation effect of the frequency of self-improvement behaviors with the agreeableness change score (current-personality) is not significantly different from zero, b = 0.013, p = 0.714.

6.6.2.5 Conscientiousness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5604.949 5704.348 0.989 0.05 0.031
# parameters of interest
params_lcs_consc_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_consc_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_consc_curr_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ goals", "goals ~~ goals", "consc_t1 ~ goals", # change goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
Joining with `by = join_by(term)`
kable(params_lcs_consc_curr_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
consc_t2 ~ consc_t1 1.000 1.000 1.000 0.997 NA NA 1.000 1.000
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.533 NA NA 1.000 1.000
d_consc_1 ~1 0.106 0.011 0.202 0.256 3.654 0.000 0.049 0.163
consc_t1 ~1 3.378 3.225 3.531 4.353 72.745 0.000 3.287 3.469
d_consc_1 ~~ d_consc_1 0.171 0.022 0.319 0.991 3.787 0.000 0.082 0.259
consc_t1 ~~ d_consc_1 -0.063 -0.145 0.018 -0.274 -2.560 0.010 -0.112 -0.015
consc_t1 ~ goals -0.664 -0.832 -0.496 -0.693 -12.973 0.000 -0.764 -0.564
d_consc_1 ~ goals 0.048 -0.073 0.168 0.093 1.296 0.195 -0.024 0.119
goals ~~ goals 0.655 0.450 0.861 1.000 10.490 0.000 0.533 0.778

The moderation effect of specific, facet-level change goals with the conscientiousness change score (current-personality) is not significantly different from zero, b = 0.048, p = 0.195.

6.6.2.6 Conscientiousness: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5514.259 5613.658 0.992 0.038 0.031
# parameters of interest
params_lcs_consc_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_consc_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_consc_curr_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ frequ", "frequ ~~ frequ", "consc_t1 ~ frequ", # frequency of self improvement
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
Joining with `by = join_by(term)`
kable(params_lcs_consc_curr_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
consc_t2 ~ consc_t1 1.000 1.000 1.000 0.996 NA NA 1.000 1.000
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.533 NA NA 1.000 1.000
d_consc_1 ~1 0.103 0.008 0.199 0.252 3.569 0.000 0.047 0.160
consc_t1 ~1 3.378 3.226 3.531 4.405 72.829 0.000 3.287 3.469
d_consc_1 ~~ d_consc_1 0.168 0.020 0.316 0.995 3.728 0.000 0.080 0.256
consc_t1 ~~ d_consc_1 -0.084 -0.176 0.007 -0.270 -3.026 0.002 -0.139 -0.030
consc_t1 ~ frequ 0.125 -0.147 0.398 0.111 1.511 0.131 -0.037 0.288
d_consc_1 ~ frequ 0.043 -0.126 0.213 0.072 0.846 0.398 -0.057 0.144
frequ ~~ frequ 0.464 0.188 0.740 1.000 5.525 0.000 0.299 0.628

The moderation effect of the frequency of self-improvement behaviors with the conscientiousness change score (current-personality) is not significantly different from zero, b = 0.043, p = 0.398.

6.6.2.7 Neuroticism: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5868.996 5968.395 0.99 0.047 0.029
# parameters of interest
params_lcs_neuro_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_neuro_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_neuro_curr_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ goals", "goals ~~ goals", "neuro_t1 ~ goals", # change goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
Joining with `by = join_by(term)`
kable(params_lcs_neuro_curr_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.070 NA NA 1.000 1.000
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.586 NA NA 1.000 1.000
d_neuro_1 ~1 -0.179 -0.285 -0.073 -0.387 -5.552 0.000 -0.242 -0.116
neuro_t1 ~1 3.276 3.114 3.438 3.890 66.638 0.000 3.179 3.372
d_neuro_1 ~~ d_neuro_1 0.206 0.112 0.301 0.970 7.210 0.000 0.150 0.263
neuro_t1 ~~ d_neuro_1 -0.103 -0.185 -0.021 -0.388 -4.130 0.000 -0.152 -0.054
neuro_t1 ~ goals 0.804 0.577 1.031 0.718 11.663 0.000 0.669 0.939
d_neuro_1 ~ goals -0.106 -0.262 0.050 -0.173 -2.235 0.025 -0.199 -0.013
goals ~~ goals 0.566 0.344 0.787 1.000 8.394 0.000 0.434 0.698

The moderation effect of specific, facet-level change goals with the neuroticism change score (current-personality) is not significantly different from zero, b = -0.106, p = 0.025.

6.6.2.8 Neuroticism: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5753.669 5853.068 0.992 0.04 0.038
# parameters of interest
params_lcs_neuro_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_neuro_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_neuro_curr_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ frequ", "frequ ~~ frequ", "neuro_t1 ~ frequ", # frequency of self improvement
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
Joining with `by = join_by(term)`
kable(params_lcs_neuro_curr_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.071 NA NA 1.000 1.000
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.588 NA NA 1.000 1.000
d_neuro_1 ~1 -0.180 -0.286 -0.074 -0.391 -5.602 0.000 -0.243 -0.117
neuro_t1 ~1 3.276 3.114 3.437 3.897 66.619 0.000 3.179 3.372
d_neuro_1 ~~ d_neuro_1 0.212 0.115 0.309 0.997 7.216 0.000 0.155 0.270
neuro_t1 ~~ d_neuro_1 -0.153 -0.251 -0.054 -0.394 -5.088 0.000 -0.211 -0.094
neuro_t1 ~ frequ -0.046 -0.344 0.253 -0.037 -0.503 0.615 -0.224 0.132
d_neuro_1 ~ frequ -0.035 -0.214 0.145 -0.051 -0.631 0.528 -0.142 0.073
frequ ~~ frequ 0.465 0.187 0.742 1.000 5.513 0.000 0.300 0.630

The moderation effect of the frequency of self-improvement behaviors with the neuroticism change score (current-personality) is not significantly different from zero, b = -0.035, p = 0.528.

6.6.2.9 Openness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5635.29 5734.689 0.983 0.052 0.037
# parameters of interest
params_lcs_openn_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_openn_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_openn_curr_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ goals", "goals ~~ goals", "openn_t1 ~ goals", # change goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
Joining with `by = join_by(term)`
kable(params_lcs_openn_curr_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.996 NA NA 1.000 1.000
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.455 NA NA 1.000 1.000
d_openn_1 ~1 0.080 0.000 0.161 0.299 3.286 0.001 0.032 0.128
openn_t1 ~1 3.485 3.358 3.611 5.931 90.550 0.000 3.409 3.560
d_openn_1 ~~ d_openn_1 0.072 0.015 0.129 1.000 4.167 0.000 0.038 0.106
openn_t1 ~~ d_openn_1 -0.034 -0.091 0.024 -0.225 -1.927 0.054 -0.068 0.001
openn_t1 ~ goals -0.326 -0.563 -0.089 -0.335 -4.525 0.000 -0.467 -0.185
d_openn_1 ~ goals 0.009 -0.135 0.153 0.020 0.204 0.839 -0.077 0.095
goals ~~ goals 0.364 0.153 0.575 1.000 5.672 0.000 0.238 0.490

The moderation effect of specific, facet-level change goals with the openness change score (current-personality) is not significantly different from zero, b = 0.009, p = 0.839.

6.6.2.10 Openness: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5456.619 5556.018 0.997 0.019 0.038
# parameters of interest
params_lcs_openn_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_openn_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_openn_curr_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ frequ", "frequ ~~ frequ", "openn_t1 ~ frequ", # frequency of self improvement
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
Joining with `by = join_by(term)`
kable(params_lcs_openn_curr_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.997 NA NA 1.000 1.000
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.456 NA NA 1.000 1.000
d_openn_1 ~1 0.077 -0.003 0.157 0.291 3.181 0.001 0.030 0.124
openn_t1 ~1 3.486 3.359 3.612 6.022 90.667 0.000 3.410 3.561
d_openn_1 ~~ d_openn_1 0.069 0.014 0.124 0.989 4.128 0.000 0.036 0.102
openn_t1 ~~ d_openn_1 -0.038 -0.094 0.018 -0.256 -2.213 0.027 -0.071 -0.004
openn_t1 ~ frequ 0.203 -0.013 0.419 0.238 3.095 0.002 0.075 0.332
d_openn_1 ~ frequ 0.041 -0.087 0.170 0.106 1.062 0.288 -0.035 0.118
frequ ~~ frequ 0.459 0.185 0.733 1.000 5.512 0.000 0.296 0.622

The moderation effect of the frequency of self-improvement behaviors with the openness change score (current-personality) is not significantly different from zero, b = 0.041, p = 0.288.

6.6.3 Big Five traits (current personality - follow-up T3)

6.6.3.1 Extraversion: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 26 5469.258 5564.942 0.984 0.046 0.04
# parameters of interest
params_lcs_extra_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_extra_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_extra_curr_specif_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("extra_t3 ~ extra_t2", "d_extra_1 =~ extra_t3", "extra_t2 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ goals", "goals ~~ goals", "extra_t2 ~ goals", # change goals
                           "d_extra_1 ~1 ", "extra_t2 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
Joining with `by = join_by(term)`
kable(params_lcs_extra_curr_specif_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
extra_t3 ~ extra_t2 1.000 1.000 1.000 0.974 NA NA 1.000 1.000
d_extra_1 =~ extra_t3 1.000 1.000 1.000 0.553 NA NA 1.000 1.000
d_extra_1 ~1 0.019 -0.062 0.100 0.062 0.766 0.444 -0.029 0.067
extra_t2 ~1 3.141 2.992 3.290 5.832 69.404 0.000 3.052 3.229
d_extra_1 ~~ d_extra_1 0.088 -0.008 0.184 0.938 3.005 0.003 0.031 0.145
extra_t2 ~~ d_extra_1 -0.011 -0.075 0.053 -0.094 -0.566 0.571 -0.049 0.027
extra_t2 ~ goals -0.557 -0.897 -0.216 -0.678 -5.385 0.000 -0.759 -0.354
d_extra_1 ~ goals 0.116 -0.057 0.289 0.249 2.209 0.027 0.013 0.219
goals ~~ goals 0.431 0.095 0.767 1.000 4.222 0.000 0.231 0.631

The moderation effect of specific, facet-level change goals with the extraversion change score (current-personality) is not significantly different from zero, b = 0.116, p = 0.027.

6.6.3.2 Extraversion: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 26 5334.706 5430.391 0.988 0.042 0.045
# parameters of interest
params_lcs_extra_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_extra_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_extra_curr_frequ_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("extra_t3 ~ extra_t2", "d_extra_1 =~ extra_t3", "extra_t2 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ frequ", "frequ ~~ frequ", "extra_t2 ~ frequ", # frequency of self improvement
                           "d_extra_1 ~1 ", "extra_t2 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
Joining with `by = join_by(term)`
kable(params_lcs_extra_curr_frequ_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
extra_t3 ~ extra_t2 1.000 1.000 1.000 0.978 NA NA 1.000 1.000
d_extra_1 =~ extra_t3 1.000 1.000 1.000 0.556 NA NA 1.000 1.000
d_extra_1 ~1 0.018 -0.067 0.102 0.057 0.697 0.486 -0.032 0.068
extra_t2 ~1 3.141 2.992 3.291 5.660 69.146 0.000 3.052 3.230
d_extra_1 ~~ d_extra_1 0.099 -0.005 0.203 0.999 3.137 0.002 0.037 0.161
extra_t2 ~~ d_extra_1 -0.042 -0.107 0.024 -0.243 -2.094 0.036 -0.080 -0.003
extra_t2 ~ frequ 0.171 -0.067 0.410 0.208 2.366 0.018 0.029 0.313
d_extra_1 ~ frequ -0.015 -0.163 0.133 -0.033 -0.339 0.735 -0.103 0.073
frequ ~~ frequ 0.454 0.179 0.729 1.000 5.434 0.000 0.290 0.618

The moderation effect of the frequency of self-improvement behaviors with the extraversion change score (current-personality) is not significantly different from zero, b = -0.015, p = 0.735.

6.6.3.3 Agreeableness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 26 4835.875 4931.559 0.988 0.035 0.038
# parameters of interest
params_lcs_agree_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_agree_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_agree_curr_specif_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("agree_t3 ~ agree_t2", "d_agree_1 =~ agree_t3", "agree_t2 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ goals", "goals ~~ goals", "agree_t2 ~ goals", # change goals
                           "d_agree_1 ~1 ", "agree_t2 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
Joining with `by = join_by(term)`
kable(params_lcs_agree_curr_specif_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
agree_t3 ~ agree_t2 1.000 1.000 1.000 0.983 NA NA 1.000 1.000
d_agree_1 =~ agree_t3 1.000 1.000 1.000 0.370 NA NA 1.000 1.000
d_agree_1 ~1 -0.007 -0.061 0.046 -0.052 -0.442 0.658 -0.039 0.025
agree_t2 ~1 3.472 3.356 3.589 9.551 98.183 0.000 3.403 3.542
d_agree_1 ~~ d_agree_1 0.019 -0.019 0.056 1.000 1.632 0.103 -0.004 0.041
agree_t2 ~~ d_agree_1 -0.007 -0.032 0.018 -0.152 -0.954 0.340 -0.022 0.008
agree_t2 ~ goals -0.143 -0.293 0.008 -0.262 -3.118 0.002 -0.232 -0.053
d_agree_1 ~ goals -0.004 -0.114 0.105 -0.021 -0.128 0.898 -0.070 0.061
goals ~~ goals 0.447 0.141 0.754 1.000 4.805 0.000 0.265 0.630

The moderation effect of specific, facet-level change goals with the agreeableness change score (current-personality) is not significantly different from zero, b = -0.004, p = 0.898.

6.6.3.4 Agreeableness: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 26 4772.466 4868.151 0.99 0.032 0.043
# parameters of interest
params_lcs_agree_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_agree_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_agree_curr_frequ_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("agree_t3 ~ agree_t2", "d_agree_1 =~ agree_t3", "agree_t2 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ frequ", "frequ ~~ frequ", "agree_t2 ~ frequ", # frequency of self improvement
                           "d_agree_1 ~1 ", "agree_t2 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
Joining with `by = join_by(term)`
kable(params_lcs_agree_curr_frequ_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
agree_t3 ~ agree_t2 1.000 1.000 1.000 0.982 NA NA 1.000 1.000
d_agree_1 =~ agree_t3 1.000 1.000 1.000 0.360 NA NA 1.000 1.000
d_agree_1 ~1 -0.008 -0.068 0.051 -0.057 -0.454 0.650 -0.044 0.027
agree_t2 ~1 3.473 3.355 3.590 8.888 97.530 0.000 3.403 3.542
d_agree_1 ~~ d_agree_1 0.019 -0.024 0.062 0.939 1.470 0.142 -0.006 0.045
agree_t2 ~~ d_agree_1 -0.002 -0.033 0.029 -0.047 -0.253 0.801 -0.021 0.016
agree_t2 ~ frequ 0.204 0.023 0.385 0.362 3.708 0.000 0.096 0.312
d_agree_1 ~ frequ -0.051 -0.144 0.042 -0.247 -1.806 0.071 -0.106 0.004
frequ ~~ frequ 0.482 0.206 0.757 1.000 5.757 0.000 0.318 0.646

The moderation effect of the frequency of self-improvement behaviors with the agreeableness change score (current-personality) is not significantly different from zero, b = -0.051, p = 0.071.

6.6.3.5 Conscientiousness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 26 4928.05 5023.735 0.995 0.032 0.034
# parameters of interest
params_lcs_consc_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_consc_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_consc_curr_specif_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("consc_t3 ~ consc_t2", "d_consc_1 =~ consc_t3", "consc_t2 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ goals", "goals ~~ goals", "consc_t2 ~ goals", # change goals
                           "d_consc_1 ~1 ", "consc_t2 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
Joining with `by = join_by(term)`
kable(params_lcs_consc_curr_specif_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
consc_t3 ~ consc_t2 1.000 1.000 1.000 1.043 NA NA 1.000 1.000
d_consc_1 =~ consc_t3 1.000 1.000 1.000 0.594 NA NA 1.000 1.000
d_consc_1 ~1 0.011 -0.095 0.117 0.025 0.341 0.733 -0.052 0.074
consc_t2 ~1 3.507 3.348 3.666 4.615 72.539 0.000 3.412 3.602
d_consc_1 ~~ d_consc_1 0.184 0.012 0.355 0.980 3.522 0.000 0.081 0.286
consc_t2 ~~ d_consc_1 -0.088 -0.195 0.019 -0.348 -2.719 0.007 -0.152 -0.025
consc_t2 ~ goals -0.602 -0.781 -0.424 -0.627 -11.135 0.000 -0.709 -0.496
d_consc_1 ~ goals 0.076 -0.062 0.215 0.140 1.816 0.069 -0.006 0.159
goals ~~ goals 0.626 0.394 0.858 1.000 8.875 0.000 0.488 0.765

The moderation effect of specific, facet-level change goals with the conscientiousness change score (current-personality) is not significantly different from zero, b = 0.076, p = 0.069.

6.6.3.6 Conscientiousness: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 26 5107.004 5202.688 0.99 0.045 0.036
# parameters of interest
params_lcs_consc_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_consc_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_consc_curr_frequ_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("consc_t3 ~ consc_t2", "d_consc_1 =~ consc_t3", "consc_t2 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ frequ", "frequ ~~ frequ", "consc_t2 ~ frequ", # frequency of self improvement
                           "d_consc_1 ~1 ", "consc_t2 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
Joining with `by = join_by(term)`
kable(params_lcs_consc_curr_frequ_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
consc_t3 ~ consc_t2 1.000 1.000 1.000 1.039 NA NA 1.000 1.000
d_consc_1 =~ consc_t3 1.000 1.000 1.000 0.591 NA NA 1.000 1.000
d_consc_1 ~1 0.012 -0.094 0.117 0.027 0.365 0.715 -0.051 0.075
consc_t2 ~1 3.507 3.348 3.666 4.624 72.538 0.000 3.413 3.602
d_consc_1 ~~ d_consc_1 0.186 0.021 0.351 0.999 3.711 0.000 0.088 0.284
consc_t2 ~~ d_consc_1 -0.113 -0.213 -0.013 -0.350 -3.725 0.000 -0.173 -0.054
consc_t2 ~ frequ 0.168 -0.106 0.443 0.151 2.018 0.044 0.005 0.332
d_consc_1 ~ frequ -0.015 -0.191 0.160 -0.024 -0.283 0.777 -0.120 0.089
frequ ~~ frequ 0.462 0.186 0.738 1.000 5.508 0.000 0.298 0.627

The moderation effect of the frequency of self-improvement behaviors with the conscientiousness change score (current-personality) is not significantly different from zero, b = -0.015, p = 0.777.

6.6.3.7 Neuroticism: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 26 5114.794 5210.479 0.99 0.045 0.028
# parameters of interest
params_lcs_neuro_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_neuro_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_neuro_curr_specif_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("neuro_t3 ~ neuro_t2", "d_neuro_1 =~ neuro_t3", "neuro_t2 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ goals", "goals ~~ goals", "neuro_t2 ~ goals", # change goals
                           "d_neuro_1 ~1 ", "neuro_t2 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
Joining with `by = join_by(term)`
kable(params_lcs_neuro_curr_specif_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
neuro_t3 ~ neuro_t2 1.000 1.000 1.000 1.024 NA NA 1.000 1.000
d_neuro_1 =~ neuro_t3 1.000 1.000 1.000 0.476 NA NA 1.000 1.000
d_neuro_1 ~1 -0.049 -0.147 0.050 -0.134 -1.627 0.104 -0.107 0.010
neuro_t2 ~1 3.095 2.931 3.259 3.946 62.201 0.000 2.998 3.193
d_neuro_1 ~~ d_neuro_1 0.130 0.045 0.215 0.976 5.030 0.000 0.079 0.180
neuro_t2 ~~ d_neuro_1 -0.052 -0.122 0.018 -0.243 -2.461 0.014 -0.094 -0.011
neuro_t2 ~ goals 0.703 0.449 0.956 0.651 9.124 0.000 0.552 0.854
d_neuro_1 ~ goals -0.077 -0.231 0.077 -0.154 -1.646 0.100 -0.169 0.015
goals ~~ goals 0.528 0.281 0.774 1.000 7.045 0.000 0.381 0.675

The moderation effect of specific, facet-level change goals with the neuroticism change score (current-personality) is not significantly different from zero, b = -0.077, p = 0.1.

6.6.3.8 Neuroticism: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 26 5249.745 5345.429 0.99 0.044 0.037
# parameters of interest
params_lcs_neuro_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_neuro_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_neuro_curr_frequ_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("neuro_t3 ~ neuro_t2", "d_neuro_1 =~ neuro_t3", "neuro_t2 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ frequ", "frequ ~~ frequ", "neuro_t2 ~ frequ", # frequency of self improvement
                           "d_neuro_1 ~1 ", "neuro_t2 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
Joining with `by = join_by(term)`
kable(params_lcs_neuro_curr_frequ_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
neuro_t3 ~ neuro_t2 1.000 1.000 1.000 1.024 NA NA 1.000 1.000
d_neuro_1 =~ neuro_t3 1.000 1.000 1.000 0.476 NA NA 1.000 1.000
d_neuro_1 ~1 -0.049 -0.148 0.050 -0.134 -1.616 0.106 -0.108 0.010
neuro_t2 ~1 3.095 2.932 3.259 3.947 62.215 0.000 2.998 3.193
d_neuro_1 ~~ d_neuro_1 0.133 0.047 0.219 1.000 5.075 0.000 0.082 0.184
neuro_t2 ~~ d_neuro_1 -0.081 -0.158 -0.005 -0.285 -3.493 0.000 -0.127 -0.036
neuro_t2 ~ frequ -0.072 -0.346 0.202 -0.063 -0.866 0.386 -0.235 0.091
d_neuro_1 ~ frequ -0.012 -0.179 0.155 -0.022 -0.230 0.818 -0.111 0.088
frequ ~~ frequ 0.465 0.190 0.740 1.000 5.561 0.000 0.301 0.628

The moderation effect of the frequency of self-improvement behaviors with the neuroticism change score (current-personality) is not significantly different from zero, b = -0.012, p = 0.818.

6.6.3.9 Openness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 26 4743.485 4839.169 0.983 0.055 0.035
# parameters of interest
params_lcs_openn_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_openn_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_openn_curr_specif_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("openn_t3 ~ openn_t2", "d_openn_1 =~ openn_t3", "openn_t2 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ goals", "goals ~~ goals", "openn_t2 ~ goals", # change goals
                           "d_openn_1 ~1 ", "openn_t2 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
Joining with `by = join_by(term)`
kable(params_lcs_openn_curr_specif_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
openn_t3 ~ openn_t2 1.000 1.000 1.000 1.007 NA NA 1.000 1.000
d_openn_1 =~ openn_t3 1.000 1.000 1.000 0.438 NA NA 1.000 1.000
d_openn_1 ~1 0.018 -0.057 0.093 0.072 0.795 0.427 -0.027 0.063
openn_t2 ~1 3.586 3.451 3.721 6.190 87.225 0.000 3.505 3.667
d_openn_1 ~~ d_openn_1 0.061 0.013 0.109 0.962 4.170 0.000 0.032 0.090
openn_t2 ~~ d_openn_1 -0.025 -0.074 0.023 -0.185 -1.714 0.086 -0.054 0.004
openn_t2 ~ goals -0.296 -0.529 -0.062 -0.307 -4.172 0.000 -0.435 -0.157
d_openn_1 ~ goals 0.082 -0.057 0.220 0.195 1.943 0.052 -0.001 0.164
goals ~~ goals 0.362 0.140 0.584 1.000 5.358 0.000 0.230 0.495

The moderation effect of specific, facet-level change goals with the openness change score (current-personality) is not significantly different from zero, b = 0.082, p = 0.052.

6.6.3.10 Openness: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 26 4875.306 4970.99 0.991 0.037 0.038
# parameters of interest
params_lcs_openn_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_openn_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_openn_curr_frequ_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("openn_t3 ~ openn_t2", "d_openn_1 =~ openn_t3", "openn_t2 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ frequ", "frequ ~~ frequ", "openn_t2 ~ frequ", # frequency of self improvement
                           "d_openn_1 ~1 ", "openn_t2 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
Joining with `by = join_by(term)`
kable(params_lcs_openn_curr_frequ_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
openn_t3 ~ openn_t2 1.000 1.000 1.000 1.006 NA NA 1.000 1.000
d_openn_1 =~ openn_t3 1.000 1.000 1.000 0.440 NA NA 1.000 1.000
d_openn_1 ~1 0.018 -0.056 0.092 0.072 0.797 0.426 -0.026 0.062
openn_t2 ~1 3.586 3.451 3.721 6.270 87.269 0.000 3.505 3.666
d_openn_1 ~~ d_openn_1 0.062 0.015 0.109 0.991 4.333 0.000 0.034 0.090
openn_t2 ~~ d_openn_1 -0.029 -0.079 0.020 -0.216 -1.967 0.049 -0.059 0.000
openn_t2 ~ frequ 0.242 0.009 0.474 0.287 3.422 0.001 0.103 0.380
d_openn_1 ~ frequ -0.034 -0.162 0.093 -0.093 -0.886 0.375 -0.111 0.042
frequ ~~ frequ 0.459 0.184 0.735 1.000 5.487 0.000 0.295 0.624

The moderation effect of the frequency of self-improvement behaviors with the openness change score (current-personality) is not significantly different from zero, b = -0.034, p = 0.375.

6.6.4 Big Five traits (ideal personality)

6.6.4.1 Extraversion: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5983.866 6083.265 0.994 0.02 0.033
# parameters of interest
params_lcs_extra_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_extra_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_extra_ideal_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ goals", "goals ~~ goals", "extra_t1 ~ goals", # change goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
Joining with `by = join_by(term)`
kable(params_lcs_extra_ideal_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.976 NA NA 1.000 1.000
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.628 NA NA 1.000 1.000
d_extra_1 ~1 -0.019 -0.092 0.054 -0.080 -0.863 0.388 -0.062 0.024
extra_t1 ~1 3.682 3.570 3.795 9.892 107.766 0.000 3.615 3.749
d_extra_1 ~~ d_extra_1 0.057 0.001 0.114 0.995 3.324 0.001 0.023 0.091
extra_t1 ~~ d_extra_1 -0.026 -0.069 0.018 -0.290 -1.948 0.051 -0.052 0.000
extra_t1 ~ goals 0.063 -0.242 0.368 0.077 0.677 0.498 -0.119 0.244
d_extra_1 ~ goals 0.037 -0.270 0.344 0.071 0.397 0.691 -0.146 0.220
goals ~~ goals 0.207 -0.128 0.543 1.000 2.037 0.042 0.008 0.407

The moderation effect of specific, facet-level change goals with the extraversion change score (ideal-personality) is not significantly different from zero, b = 0.037, p = 0.691.

6.6.4.2 Extraversion: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5402.83 5502.23 0.994 0.022 0.036
# parameters of interest
params_lcs_extra_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_extra_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_extra_ideal_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ frequ", "frequ ~~ frequ", "extra_t1 ~ frequ", # frequency of self improvement
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
Joining with `by = join_by(term)`
kable(params_lcs_extra_ideal_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.975 NA NA 1.000 1.000
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.628 NA NA 1.000 1.000
d_extra_1 ~1 -0.019 -0.090 0.053 -0.079 -0.854 0.393 -0.061 0.024
extra_t1 ~1 3.682 3.570 3.794 10.096 107.889 0.000 3.615 3.749
d_extra_1 ~~ d_extra_1 0.055 0.000 0.110 0.989 3.272 0.001 0.022 0.087
extra_t1 ~~ d_extra_1 -0.027 -0.070 0.016 -0.326 -2.035 0.042 -0.052 -0.001
extra_t1 ~ frequ 0.150 0.012 0.287 0.285 3.581 0.000 0.068 0.232
d_extra_1 ~ frequ 0.035 -0.088 0.157 0.103 0.934 0.351 -0.038 0.108
frequ ~~ frequ 0.483 0.212 0.754 1.000 5.857 0.000 0.321 0.644

The moderation effect of the frequency of self-improvement behaviors with the extraversion change score (ideal-personality) is not significantly different from zero, b = 0.035, p = 0.351.

6.6.4.3 Agreeableness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5653.605 5753.005 0.978 0.047 0.048
# parameters of interest
params_lcs_agree_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_agree_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_agree_ideal_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ goals", "goals ~~ goals", "agree_t1 ~ goals", # change goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
Joining with `by = join_by(term)`
kable(params_lcs_agree_ideal_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.053 NA NA 1.000 1.000
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.646 NA NA 1.000 1.000
d_agree_1 ~1 -0.030 -0.105 0.044 -0.111 -1.347 0.178 -0.075 0.014
agree_t1 ~1 3.770 3.653 3.886 8.453 106.066 0.000 3.700 3.839
d_agree_1 ~~ d_agree_1 0.075 0.018 0.131 0.998 4.322 0.000 0.041 0.108
agree_t1 ~~ d_agree_1 -0.047 -0.088 -0.005 -0.385 -3.654 0.000 -0.071 -0.022
agree_t1 ~ goals -0.074 -0.237 0.089 -0.114 -1.487 0.137 -0.171 0.023
d_agree_1 ~ goals 0.019 -0.122 0.160 0.048 0.444 0.657 -0.065 0.103
goals ~~ goals 0.477 0.206 0.749 1.000 5.789 0.000 0.316 0.639

The moderation effect of specific, facet-level change goals with the agreeableness change score (ideal-personality) is not significantly different from zero, b = 0.019, p = 0.657.

6.6.4.4 Agreeableness: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5250.512 5349.911 0.97 0.056 0.052
# parameters of interest
params_lcs_agree_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_agree_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_agree_ideal_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ frequ", "frequ ~~ frequ", "agree_t1 ~ frequ", # frequency of self improvement
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
Joining with `by = join_by(term)`
kable(params_lcs_agree_ideal_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.055 NA NA 1.000 1.000
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.647 NA NA 1.000 1.000
d_agree_1 ~1 -0.030 -0.103 0.043 -0.112 -1.355 0.175 -0.074 0.013
agree_t1 ~1 3.769 3.653 3.886 8.618 106.252 0.000 3.700 3.839
d_agree_1 ~~ d_agree_1 0.071 0.017 0.126 0.993 4.285 0.000 0.039 0.104
agree_t1 ~~ d_agree_1 -0.043 -0.085 -0.001 -0.381 -3.386 0.001 -0.068 -0.018
agree_t1 ~ frequ 0.153 0.003 0.302 0.242 3.363 0.001 0.064 0.242
d_agree_1 ~ frequ -0.032 -0.167 0.102 -0.084 -0.794 0.427 -0.113 0.048
frequ ~~ frequ 0.480 0.203 0.758 1.000 5.693 0.000 0.315 0.645

The moderation effect of the frequency of self-improvement behaviors with the agreeableness change score (ideal-personality) is not significantly different from zero, b = -0.032, p = 0.427.

6.6.4.5 Conscientiousness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5121.303 5220.702 0.999 0.01 0.03
# parameters of interest
params_lcs_consc_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_consc_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_consc_ideal_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ goals", "goals ~~ goals", "consc_t1 ~ goals", # change goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
Joining with `by = join_by(term)`
kable(params_lcs_consc_ideal_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
consc_t2 ~ consc_t1 1.000 1.000 1.000 0.936 NA NA 1.000 1.000
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.623 NA NA 1.000 1.000
d_consc_1 ~1 0.009 -0.063 0.081 0.035 0.423 0.673 -0.034 0.052
consc_t1 ~1 4.319 4.214 4.424 10.824 135.515 0.000 4.257 4.382
d_consc_1 ~~ d_consc_1 0.069 0.019 0.120 0.982 4.528 0.000 0.039 0.099
consc_t1 ~~ d_consc_1 -0.023 -0.068 0.022 -0.222 -1.699 0.089 -0.050 0.004
consc_t1 ~ goals 0.028 -0.082 0.137 0.054 0.835 0.404 -0.037 0.093
d_consc_1 ~ goals -0.046 -0.151 0.058 -0.136 -1.457 0.145 -0.109 0.016
goals ~~ goals 0.606 0.369 0.842 1.000 8.433 0.000 0.465 0.746

The moderation effect of specific, facet-level change goals with the conscientiousness change score (ideal-personality) is not significantly different from zero, b = -0.046, p = 0.145.

6.6.4.6 Conscientiousness: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 4867.134 4966.533 0.982 0.044 0.053
# parameters of interest
params_lcs_consc_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_consc_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_consc_ideal_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ frequ", "frequ ~~ frequ", "consc_t1 ~ frequ", # frequency of self improvement
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
Joining with `by = join_by(term)`
kable(params_lcs_consc_ideal_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
consc_t2 ~ consc_t1 1.000 1.000 1.000 0.937 NA NA 1.000 1.000
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.619 NA NA 1.000 1.000
d_consc_1 ~1 0.010 -0.062 0.082 0.037 0.443 0.658 -0.033 0.053
consc_t1 ~1 4.319 4.214 4.424 10.733 135.393 0.000 4.257 4.382
d_consc_1 ~~ d_consc_1 0.070 0.020 0.120 0.993 4.634 0.000 0.041 0.100
consc_t1 ~~ d_consc_1 -0.026 -0.073 0.021 -0.252 -1.833 0.067 -0.054 0.002
consc_t1 ~ frequ 0.132 -0.002 0.266 0.229 3.246 0.001 0.052 0.212
d_consc_1 ~ frequ 0.031 -0.073 0.136 0.082 0.988 0.323 -0.031 0.094
frequ ~~ frequ 0.487 0.205 0.769 1.000 5.676 0.000 0.319 0.655

The moderation effect of the frequency of self-improvement behaviors with the conscientiousness change score (ideal-personality) is not significantly different from zero, b = 0.031, p = 0.323.

6.6.4.7 Neuroticism: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5181.078 5280.477 0.999 0.008 0.024
# parameters of interest
params_lcs_neuro_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_neuro_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_neuro_ideal_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ goals", "goals ~~ goals", "neuro_t1 ~ goals", # change goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
Joining with `by = join_by(term)`
kable(params_lcs_neuro_ideal_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.943 NA NA 1.000 1.000
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.755 NA NA 1.000 1.000
d_neuro_1 ~1 0.042 -0.048 0.132 0.116 1.543 0.123 -0.011 0.096
neuro_t1 ~1 1.707 1.608 1.806 3.748 56.783 0.000 1.648 1.766
d_neuro_1 ~~ d_neuro_1 0.130 0.042 0.218 0.980 4.875 0.000 0.078 0.183
neuro_t1 ~~ d_neuro_1 -0.050 -0.117 0.017 -0.307 -2.455 0.014 -0.090 -0.010
neuro_t1 ~ goals -0.098 -0.243 0.048 -0.157 -2.208 0.027 -0.184 -0.011
d_neuro_1 ~ goals 0.071 -0.083 0.224 0.142 1.516 0.129 -0.021 0.162
goals ~~ goals 0.538 0.295 0.781 1.000 7.280 0.000 0.393 0.683

The moderation effect of specific, facet-level change goals with the neuroticism change score (ideal-personality) is not significantly different from zero, b = 0.071, p = 0.129.

6.6.4.8 Neuroticism: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 4888.225 4987.625 0.983 0.042 0.055
# parameters of interest
params_lcs_neuro_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_neuro_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_neuro_ideal_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ frequ", "frequ ~~ frequ", "neuro_t1 ~ frequ", # frequency of self improvement
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
Joining with `by = join_by(term)`
kable(params_lcs_neuro_ideal_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.942 NA NA 1.000 1.000
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.754 NA NA 1.000 1.000
d_neuro_1 ~1 0.042 -0.048 0.132 0.114 1.528 0.127 -0.012 0.095
neuro_t1 ~1 1.707 1.608 1.806 3.746 56.783 0.000 1.648 1.766
d_neuro_1 ~~ d_neuro_1 0.133 0.040 0.226 1.000 4.703 0.000 0.078 0.188
neuro_t1 ~~ d_neuro_1 -0.054 -0.130 0.023 -0.328 -2.308 0.021 -0.099 -0.008
neuro_t1 ~ frequ -0.125 -0.298 0.048 -0.192 -2.376 0.017 -0.228 -0.022
d_neuro_1 ~ frequ -0.004 -0.162 0.154 -0.008 -0.087 0.931 -0.098 0.090
frequ ~~ frequ 0.490 0.199 0.780 1.000 5.543 0.000 0.317 0.663

The moderation effect of the frequency of self-improvement behaviors with the neuroticism change score (ideal-personality) is not significantly different from zero, b = -0.004, p = 0.931.

6.6.4.9 Openness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5523.316 5622.715 0.976 0.053 0.061
# parameters of interest
params_lcs_openn_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_openn_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_openn_ideal_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ goals", "goals ~~ goals", "openn_t1 ~ goals", # change goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
Joining with `by = join_by(term)`
kable(params_lcs_openn_ideal_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.026 NA NA 1.000 1.000
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.516 NA NA 1.000 1.000
d_openn_1 ~1 0.016 -0.031 0.063 0.109 1.131 0.258 -0.012 0.044
openn_t1 ~1 3.917 3.814 4.021 13.356 125.080 0.000 3.856 3.979
d_openn_1 ~~ d_openn_1 0.022 -0.003 0.047 1.000 2.877 0.004 0.007 0.037
openn_t1 ~~ d_openn_1 -0.013 -0.036 0.010 -0.302 -1.905 0.057 -0.027 0.000
openn_t1 ~ goals -0.015 -0.135 0.104 -0.031 -0.415 0.678 -0.086 0.056
d_openn_1 ~ goals 0.000 -0.087 0.087 0.000 0.002 0.999 -0.052 0.052
goals ~~ goals 0.365 0.158 0.572 1.000 5.801 0.000 0.242 0.488

The moderation effect of specific, facet-level change goals with the openness change score (ideal-personality) is not significantly different from zero, b = 0, p = 0.999.

6.6.4.10 Openness: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 26 5327.6 5426.999 0.949 0.071 0.072
# parameters of interest
params_lcs_openn_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_openn_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_openn_ideal_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ frequ", "frequ ~~ frequ", "openn_t1 ~ frequ", # frequency of self improvement
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
Joining with `by = join_by(term)`
kable(params_lcs_openn_ideal_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.033 NA NA 1.000 1.000
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.516 NA NA 1.000 1.000
d_openn_1 ~1 0.017 -0.032 0.065 0.110 1.128 0.259 -0.012 0.045
openn_t1 ~1 3.917 3.814 4.020 13.070 124.999 0.000 3.856 3.979
d_openn_1 ~~ d_openn_1 0.022 -0.004 0.048 0.998 2.832 0.005 0.007 0.038
openn_t1 ~~ d_openn_1 -0.014 -0.038 0.010 -0.320 -1.950 0.051 -0.029 0.000
openn_t1 ~ frequ 0.051 -0.073 0.176 0.118 1.363 0.173 -0.023 0.125
d_openn_1 ~ frequ 0.011 -0.070 0.091 0.049 0.441 0.659 -0.037 0.059
frequ ~~ frequ 0.472 0.195 0.749 1.000 5.613 0.000 0.307 0.637

The moderation effect of the frequency of self-improvement behaviors with the openness change score (ideal-personality) is not significantly different from zero, b = 0.011, p = 0.659.

6.6.5 Big Five facets (run models)

Run models for all facets with a template & loop:

Show the code
# create templates:

# 1st, for facet-specific change goal

facet_template_mod_goal <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1         # This estimates the variance of facet_t1 
facet_t1 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
facet_t1 ~ ind_goal        # This estimates the moderation effect on personality at T1
d_facet_1 ~ ind_goal       # This estimates the moderation effect on the change score

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ind_goal ~~ ind_goal
ind_goal ~ 1
'

# loop across 15 facets -> change in current-personality ratings
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  items = paste0(bfi_versions[[5]], item_nrs)
  mod_name = paste0("sb07_", str_pad(i-5, 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(facet_template_mod_goal, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                         "ind_goal" = mod_name))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp6")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp6")), facet_model_fit))
}  

# loop across 15 facets -> change in ideal-personality ratings
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  items = paste0(bfi_versions[[6]], item_nrs) # ideal
  mod_name = paste0("sb07_", str_pad(i-5, 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(facet_template_mod_goal, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                         "ind_goal" = mod_name))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp6")), template_filled)) # ideal
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp6")), facet_model_fit))
}  

# we also need separate models for follow-up (fu), that is, changes from T2 to T3 (only for current personality ratings)

facet_template_mod_goal_fu <- '
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2
facet_t3 =~ 1*ind1_t3 + lamb2*ind2_t3 + lamb3*ind3_t3 + lamb4*ind4_t3 # This specifies the measurement model for facet at T3 (with equality constraints)

facet_t3 ~ 1*facet_t2     # This parameter regresses facet_t3 perfectly on facet_t2
d_facet_1 =~ 1*facet_t3   # This defines the latent change score factor as measured perfectly by scores on facet_t3
facet_t3 ~ 0*1            # This line constrains the intercept of facet_t3 to 0
facet_t3 ~~ 0*facet_t3    # This fixes the variance of facet_t3 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t2 ~ 1               # This estimates the intercept of facet_t2 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t2 ~~ facet_t2         # This estimates the variance of facet_t2 
facet_t2 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
facet_t2 ~ ind_goal        # This estimates the moderation effect on personality at T2
d_facet_1 ~ ind_goal       # This estimates the moderation effect on the change score

ind1_t2 ~~ ind1_t3   # This allows residual covariance on indicator X1 across T2 and T3
ind2_t2 ~~ ind2_t3   # This allows residual covariance on indicator X2 across T2 and T3
ind3_t2 ~~ ind3_t3   # This allows residual covariance on indicator X3 across T2 and T3
ind4_t2 ~~ ind4_t3   # This allows residual covariance on indicator X4 across T2 and T3

ind1_t2 ~~ res1*ind1_t2   # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2   # This allows residual variance on indicator X2 at T2
ind3_t2 ~~ res3*ind3_t2   # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2   # This allows residual variance on indicator X4 at T2

ind1_t3 ~~ res1*ind1_t3  # This allows residual variance on indicator X1 at T3 
ind2_t3 ~~ res2*ind2_t3  # This allows residual variance on indicator X2 at T3 
ind3_t3 ~~ res3*ind3_t3  # This allows residual variance on indicator X3 at T3
ind4_t3 ~~ res4*ind4_t3  # This allows residual variance on indicator X4 at T3

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ind1_t3 ~ 0*1      # This constrains the intercept of X1 to 0 at T3
ind2_t3 ~ m2*1     # This estimates the intercept of X2 at T3
ind3_t3 ~ m3*1     # This estimates the intercept of X3 at T3
ind4_t3 ~ m4*1     # This estimates the intercept of X4 at T3

ind_goal ~~ ind_goal
ind_goal ~ 1
'

# loop across 15 facets -> change in current-personality ratings
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  items = paste0(bfi_versions[[5]], item_nrs)
  mod_name = paste0("sb07_", str_pad(i-5, 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(facet_template_mod_goal_fu, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                         "ind_goal" = mod_name))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb_mod_fu, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp6_fu")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp6_fu")), facet_model_fit))
}  

# 2nd, for frequency of self-improvement behavior

facet_template_mod_frequ <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

frequ =~ 1*sb04_01_t2 + sb04_02_t2 + sb04_03_t2 # latent variable for moderator

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1         # This estimates the variance of facet_t1 
facet_t1 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
facet_t1 ~ frequ           # This estimates the moderation effect on personality at T1
d_facet_1 ~ frequ          # This estimates the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

sb04_01_t2 ~~ sb04_01_t2
sb04_02_t2 ~~ sb04_02_t2
sb04_03_t2 ~~ sb04_03_t2

sb04_01_t2 ~ 1
sb04_02_t2 ~ 1
sb04_03_t2 ~ 1
'

# loop across 15 facets -> change in current-personality ratings
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  items = paste0(bfi_versions[[5]], item_nrs)
  template_filled <- str_replace_all(facet_template_mod_frequ, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4]))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp6")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp6")), facet_model_fit))
}  

# loop across 15 facets -> change in ideal-personality ratings
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  items = paste0(bfi_versions[[6]], item_nrs) # ideal
  template_filled <- str_replace_all(facet_template_mod_frequ, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4]))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp6")), template_filled)) # ideal
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp6")), facet_model_fit))
}  

# we also need separate models for follow-up (fu), that is, changes from T2 to T3 (only for current personality ratings)

facet_template_mod_frequ_fu <- '
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2
facet_t3 =~ 1*ind1_t3 + lamb2*ind2_t3 + lamb3*ind3_t3 + lamb4*ind4_t3 # This specifies the measurement model for facet at T3 (with equality constraints)

frequ =~ 1*sb04_01_t2 + sb04_02_t2 + sb04_03_t2 # latent variable for moderator

facet_t3 ~ 1*facet_t2     # This parameter regresses facet_t3 perfectly on facet_t2
d_facet_1 =~ 1*facet_t3   # This defines the latent change score factor as measured perfectly by scores on facet_t3
facet_t3 ~ 0*1            # This line constrains the intercept of facet_t3 to 0
facet_t3 ~~ 0*facet_t3    # This fixes the variance of facet_t3 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t2 ~ 1               # This estimates the intercept of facet_t2 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t2 ~~ facet_t2         # This estimates the variance of facet_t2 
facet_t2 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
facet_t2 ~ frequ           # This estimates the moderation effect on personality at T2
d_facet_1 ~ frequ          # This estimates the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

ind1_t2 ~~ ind1_t3   # This allows residual covariance on indicator X1 across T2 and T3
ind2_t2 ~~ ind2_t3   # This allows residual covariance on indicator X2 across T2 and T3
ind3_t2 ~~ ind3_t3   # This allows residual covariance on indicator X3 across T2 and T3
ind4_t2 ~~ ind4_t3   # This allows residual covariance on indicator X4 across T2 and T3

ind1_t2 ~~ res1*ind1_t2   # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2   # This allows residual variance on indicator X2 at T2
ind3_t2 ~~ res3*ind3_t2   # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2   # This allows residual variance on indicator X4 at T2

ind1_t3 ~~ res1*ind1_t3  # This allows residual variance on indicator X1 at T3 
ind2_t3 ~~ res2*ind2_t3  # This allows residual variance on indicator X2 at T3 
ind3_t3 ~~ res3*ind3_t3  # This allows residual variance on indicator X3 at T3
ind4_t3 ~~ res4*ind4_t3  # This allows residual variance on indicator X4 at T3

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ind1_t3 ~ 0*1      # This constrains the intercept of X1 to 0 at T3
ind2_t3 ~ m2*1     # This estimates the intercept of X2 at T3
ind3_t3 ~ m3*1     # This estimates the intercept of X3 at T3
ind4_t3 ~ m4*1     # This estimates the intercept of X4 at T3

sb04_01_t2 ~~ sb04_01_t2
sb04_02_t2 ~~ sb04_02_t2
sb04_03_t2 ~~ sb04_03_t2

sb04_01_t2 ~ 1
sb04_02_t2 ~ 1
sb04_03_t2 ~ 1
'

# loop across 15 facets -> change in current-personality ratings from T2 to T3
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  items = paste0(bfi_versions[[5]], item_nrs)
  template_filled <- str_replace_all(facet_template_mod_frequ_fu, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4]))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sb_mod_fu, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp6_fu")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp6_fu")), facet_model_fit))
}  

6.6.6 Big Five facets (current personality)

6.6.6.1 Sociability - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7876.792 7964.722 0.937 0.088 0.052
# parameters of interest
params_lcs_socia_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_socia_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_socia_curr_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~ sb07_01_t1", "sb07_01_t1 ~~ sb07_01_t1", "d_socia_1 ~ sb07_01_t1", # change goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
Joining with `by = join_by(term)`
kable(params_lcs_socia_curr_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.078 NA NA 1.000 1.000
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.504 NA NA 1.000 1.000
d_socia_1 ~1 0.082 -0.043 0.206 0.208 2.156 0.031 0.007 0.156
socia_t1 ~1 2.873 2.674 3.072 3.421 47.439 0.000 2.754 2.992
d_socia_1 ~~ d_socia_1 0.153 0.026 0.279 0.991 3.965 0.000 0.077 0.228
socia_t1 ~~ d_socia_1 -0.111 -0.216 -0.007 -0.386 -3.502 0.000 -0.173 -0.049
d_socia_1 ~ sb07_01_t1 0.037 -0.085 0.160 0.095 1.002 0.316 -0.036 0.110
sb07_01_t1 ~~ sb07_01_t1 0.997 0.790 1.203 1.000 15.904 0.000 0.874 1.119

The moderation effect of the facet-specific change goal with the sociability change score (current-personality) is not significantly different from zero, b = 0.037, p = 0.316.

6.6.6.2 Sociability - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9252.51 9367.201 0.938 0.075 0.066
# parameters of interest
params_lcs_socia_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_socia_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_socia_curr_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~ frequ", "frequ ~~ frequ", "socia_t1 ~ frequ", # frequency of self improvement
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
Joining with `by = join_by(term)`
kable(params_lcs_socia_curr_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.082 NA NA 1.000 1.000
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.505 NA NA 1.000 1.000
d_socia_1 ~1 0.073 -0.047 0.194 0.193 1.996 0.046 0.001 0.145
socia_t1 ~1 2.875 2.661 3.090 3.530 44.063 0.000 2.747 3.003
d_socia_1 ~~ d_socia_1 0.126 0.012 0.240 0.871 3.642 0.000 0.058 0.194
socia_t1 ~~ d_socia_1 -0.108 -0.220 0.004 -0.376 -3.182 0.001 -0.174 -0.041
socia_t1 ~ frequ -0.135 -0.427 0.157 -0.114 -1.520 0.128 -0.309 0.039
d_socia_1 ~ frequ 0.198 0.022 0.374 0.359 3.694 0.000 0.093 0.303
frequ ~~ frequ 0.476 0.201 0.752 1.000 5.689 0.000 0.312 0.640

The frequency of self-improvement behaviors significantly moderates changes in sociability (current-personality) from T1 to T2, b = 0.198, p = 0.

6.6.6.3 Assertiveness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8149.264 8237.194 0.94 0.076 0.056
# parameters of interest
params_lcs_asser_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_asser_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_asser_curr_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~ sb07_02_t1", "sb07_02_t1 ~~ sb07_02_t1", "d_asser_1 ~ sb07_02_t1", # change goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
Joining with `by = join_by(term)`
kable(params_lcs_asser_curr_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.036 NA NA 1.000 1.000
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.482 NA NA 1.000 1.000
d_asser_1 ~1 0.065 -0.022 0.151 0.232 2.455 0.014 0.013 0.116
asser_t1 ~1 3.091 2.897 3.285 5.172 52.383 0.000 2.975 3.206
d_asser_1 ~~ d_asser_1 0.077 -0.031 0.185 0.996 2.341 0.019 0.013 0.141
asser_t1 ~~ d_asser_1 -0.053 -0.131 0.024 -0.333 -2.278 0.023 -0.099 -0.007
d_asser_1 ~ sb07_02_t1 -0.018 -0.101 0.064 -0.066 -0.736 0.462 -0.068 0.031
sb07_02_t1 ~~ sb07_02_t1 0.997 0.806 1.188 1.000 17.186 0.000 0.883 1.111

The moderation effect of the facet-specific change goal with the assertiveness change score (current-personality) is not significantly different from zero, b = -0.018, p = 0.462.

6.6.6.4 Assertiveness - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9472.414 9587.105 0.981 0.038 0.041
# parameters of interest
params_lcs_asser_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_asser_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_asser_curr_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~ frequ", "frequ ~~ frequ", "asser_t1 ~ frequ", # frequency of self improvement
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
Joining with `by = join_by(term)`
kable(params_lcs_asser_curr_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.026 NA NA 1.000 1.000
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.486 NA NA 1.000 1.000
d_asser_1 ~1 0.058 -0.023 0.138 0.214 2.344 0.019 0.009 0.106
asser_t1 ~1 3.094 2.893 3.296 5.455 50.439 0.000 2.974 3.215
d_asser_1 ~~ d_asser_1 0.072 -0.026 0.170 0.994 2.414 0.016 0.014 0.130
asser_t1 ~~ d_asser_1 -0.047 -0.116 0.023 -0.314 -2.214 0.027 -0.088 -0.005
asser_t1 ~ frequ 0.179 -0.048 0.406 0.215 2.597 0.009 0.044 0.314
d_asser_1 ~ frequ 0.030 -0.102 0.163 0.077 0.757 0.449 -0.048 0.109
frequ ~~ frequ 0.462 0.192 0.733 1.000 5.624 0.000 0.301 0.624

The moderation effect of the frequency of self-improvement behaviors with the assertiveness change score (current-personality) is not significantly different from zero, b = 0.03, p = 0.449.

6.6.6.5 Energy - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8275.271 8363.201 0.978 0.042 0.039
# parameters of interest
params_lcs_energ_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_energ_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_energ_curr_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~ sb07_03_t1", "sb07_03_t1 ~~ sb07_03_t1", "d_energ_1 ~ sb07_03_t1", # change goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
Joining with `by = join_by(term)`
kable(params_lcs_energ_curr_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.075 NA NA 1.000 1.000
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.481 NA NA 1.000 1.000
d_energ_1 ~1 0.057 -0.009 0.123 0.375 2.826 0.005 0.017 0.096
energ_t1 ~1 3.229 3.052 3.406 9.552 59.987 0.000 3.124 3.335
d_energ_1 ~~ d_energ_1 0.020 -0.017 0.057 0.879 1.798 0.072 -0.002 0.042
energ_t1 ~~ d_energ_1 -0.011 -0.034 0.012 -0.254 -1.545 0.122 -0.024 0.003
d_energ_1 ~ sb07_03_t1 0.053 -0.004 0.109 0.348 3.074 0.002 0.019 0.086
sb07_03_t1 ~~ sb07_03_t1 0.996 0.786 1.207 1.000 15.560 0.000 0.871 1.122

The moderation effect of the facet-specific change goal with the energy change score (current-personality) is not significantly different from zero, b = 0.053, p = 0.002.

6.6.6.6 Energy - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9648.964 9763.655 0.968 0.045 0.051
# parameters of interest
params_lcs_energ_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_energ_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_energ_curr_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~ frequ", "frequ ~~ frequ", "energ_t1 ~ frequ", # frequency of self improvement
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
Joining with `by = join_by(term)`
kable(params_lcs_energ_curr_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.077 NA NA 1.000 1.000
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.487 NA NA 1.000 1.000
d_energ_1 ~1 0.058 -0.010 0.127 0.370 2.798 0.005 0.017 0.099
energ_t1 ~1 3.229 3.047 3.410 9.266 58.475 0.000 3.120 3.337
d_energ_1 ~~ d_energ_1 0.023 -0.019 0.065 0.929 1.816 0.069 -0.002 0.048
energ_t1 ~~ d_energ_1 -0.023 -0.058 0.013 -0.430 -2.089 0.037 -0.044 -0.001
energ_t1 ~ frequ 0.063 -0.092 0.217 0.121 1.332 0.183 -0.030 0.155
d_energ_1 ~ frequ 0.062 -0.037 0.162 0.267 2.074 0.038 0.003 0.122
frequ ~~ frequ 0.453 0.177 0.728 1.000 5.407 0.000 0.289 0.617

The moderation effect of the frequency of self-improvement behaviors with the energy change score (current-personality) is not significantly different from zero (at p < . 001), b = 0.062, p = 0.038.

6.6.6.7 Compassion - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8044.767 8132.697 0.969 0.043 0.044
# parameters of interest
params_lcs_compa_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_compa_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_compa_curr_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~ sb07_04_t1", "sb07_04_t1 ~~ sb07_04_t1", "d_compa_1 ~ sb07_04_t1", # change goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
Joining with `by = join_by(term)`
kable(params_lcs_compa_curr_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.132 NA NA 1.000 1.000
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.462 NA NA 1.000 1.000
d_compa_1 ~1 0.102 -0.001 0.205 0.411 3.270 0.001 0.041 0.163
compa_t1 ~1 4.183 4.031 4.334 6.885 90.965 0.000 4.093 4.273
d_compa_1 ~~ d_compa_1 0.057 -0.032 0.147 0.933 2.117 0.034 0.004 0.111
compa_t1 ~~ d_compa_1 -0.058 -0.132 0.016 -0.422 -2.561 0.010 -0.102 -0.014
d_compa_1 ~ sb07_04_t1 0.064 -0.044 0.172 0.259 1.957 0.050 0.000 0.129
sb07_04_t1 ~~ sb07_04_t1 0.997 0.833 1.161 1.000 19.989 0.000 0.899 1.095

The moderation effect of the facet-specific change goal with the compassion change score (current-personality) is not significantly different from zero, b = 0.064, p = 0.05.

6.6.6.8 Compassion - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9371.88 9486.571 0.932 0.062 0.07
# parameters of interest
params_lcs_compa_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_compa_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_compa_curr_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~ frequ", "frequ ~~ frequ", "compa_t1 ~ frequ", # frequency of self improvement
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
Joining with `by = join_by(term)`
kable(params_lcs_compa_curr_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.133 NA NA 1.000 1.000
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.464 NA NA 1.000 1.000
d_compa_1 ~1 0.103 -0.002 0.207 0.409 3.237 0.001 0.040 0.165
compa_t1 ~1 4.183 4.027 4.339 6.834 88.071 0.000 4.090 4.276
d_compa_1 ~~ d_compa_1 0.063 -0.031 0.156 0.998 2.207 0.027 0.007 0.119
compa_t1 ~~ d_compa_1 -0.075 -0.160 0.010 -0.507 -2.897 0.004 -0.125 -0.024
compa_t1 ~ frequ 0.247 -0.038 0.532 0.278 2.855 0.004 0.078 0.417
d_compa_1 ~ frequ 0.015 -0.180 0.211 0.042 0.258 0.796 -0.101 0.132
frequ ~~ frequ 0.473 0.192 0.754 1.000 5.544 0.000 0.306 0.640

The moderation effect of the frequency of self-improvement behaviors with the compassion change score (current-personality) is not significantly different from zero, b = 0.015, p = 0.796.

6.6.6.9 Respectfulness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 6952.741 7040.671 0.951 0.064 0.062
# parameters of interest
params_lcs_respe_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_respe_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_respe_curr_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~ sb07_05_t1", "sb07_05_t1 ~~ sb07_05_t1", "d_respe_1 ~ sb07_05_t1", # change goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
Joining with `by = join_by(term)`
kable(params_lcs_respe_curr_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.166 NA NA 1.000 1.000
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.637 NA NA 1.000 1.000
d_respe_1 ~1 0.020 -0.075 0.115 0.064 0.694 0.488 -0.037 0.077
respe_t1 ~1 4.474 4.349 4.599 7.827 117.737 0.000 4.400 4.549
d_respe_1 ~~ d_respe_1 0.096 -0.011 0.203 0.982 2.950 0.003 0.032 0.159
respe_t1 ~~ d_respe_1 -0.083 -0.181 0.015 -0.508 -2.774 0.006 -0.141 -0.024
d_respe_1 ~ sb07_05_t1 0.042 -0.067 0.150 0.133 1.261 0.207 -0.023 0.106
sb07_05_t1 ~~ sb07_05_t1 0.997 0.795 1.198 1.000 16.293 0.000 0.877 1.117

The moderation effect of the facet-specific change goal with the respectfulness change score (current-personality) is not significantly different from zero, b = 0.042, p = 0.207.

6.6.6.10 Respectfulness - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 8294.572 8409.263 0.954 0.056 0.06
# parameters of interest
params_lcs_respe_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_respe_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_respe_curr_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~ frequ", "frequ ~~ frequ", "respe_t1 ~ frequ", # frequency of self improvement
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
Joining with `by = join_by(term)`
kable(params_lcs_respe_curr_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.167 NA NA 1.000 1.000
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.639 NA NA 1.000 1.000
d_respe_1 ~1 0.018 -0.077 0.113 0.057 0.613 0.540 -0.039 0.074
respe_t1 ~1 4.474 4.342 4.606 7.847 111.809 0.000 4.395 4.552
d_respe_1 ~~ d_respe_1 0.093 -0.013 0.200 0.956 2.888 0.004 0.030 0.157
respe_t1 ~~ d_respe_1 -0.080 -0.185 0.025 -0.485 -2.519 0.012 -0.142 -0.018
respe_t1 ~ frequ 0.263 0.040 0.486 0.316 3.880 0.000 0.130 0.396
d_respe_1 ~ frequ -0.096 -0.249 0.057 -0.211 -2.067 0.039 -0.187 -0.005
frequ ~~ frequ 0.468 0.201 0.736 1.000 5.753 0.000 0.309 0.628

The moderation effect of the frequency of self-improvement behaviors with the respectfulness change score (current-personality) is not significantly different from zero, b = -0.096, p = 0.039.

6.6.6.11 Trust - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8326.839 8414.769 0.95 0.059 0.056
# parameters of interest
params_lcs_trust_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_trust_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_trust_curr_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~ sb07_06_t1", "sb07_06_t1 ~~ sb07_06_t1", "d_trust_1 ~ sb07_06_t1", # change goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
Joining with `by = join_by(term)`
kable(params_lcs_trust_curr_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.073 NA NA 1.000 1.000
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.514 NA NA 1.000 1.000
d_trust_1 ~1 0.101 -0.024 0.226 0.321 2.648 0.008 0.026 0.175
trust_t1 ~1 3.161 2.954 3.369 4.824 50.165 0.000 3.038 3.285
d_trust_1 ~~ d_trust_1 0.094 -0.036 0.225 0.958 2.372 0.018 0.016 0.172
trust_t1 ~~ d_trust_1 -0.069 -0.173 0.034 -0.352 -2.201 0.028 -0.131 -0.008
d_trust_1 ~ sb07_06_t1 0.065 -0.064 0.193 0.205 1.648 0.099 -0.012 0.141
sb07_06_t1 ~~ sb07_06_t1 0.997 0.840 1.154 1.000 20.862 0.000 0.903 1.091

The moderation effect of the facet-specific change goal with the trust change score (current-personality) is not significantly different from zero, b = 0.065, p = 0.099.

6.6.6.12 Trust - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9646.939 9761.631 0.966 0.045 0.058
# parameters of interest
params_lcs_trust_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_trust_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_trust_curr_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~ frequ", "frequ ~~ frequ", "trust_t1 ~ frequ", # frequency of self improvement
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
Joining with `by = join_by(term)`
kable(params_lcs_trust_curr_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.077 NA NA 1.000 1.000
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.503 NA NA 1.000 1.000
d_trust_1 ~1 0.091 -0.038 0.221 0.313 2.326 0.020 0.014 0.168
trust_t1 ~1 3.166 2.958 3.374 5.071 50.012 0.000 3.042 3.290
d_trust_1 ~~ d_trust_1 0.085 -0.050 0.220 1.000 2.073 0.038 0.005 0.166
trust_t1 ~~ d_trust_1 -0.069 -0.182 0.043 -0.384 -2.032 0.042 -0.136 -0.002
trust_t1 ~ frequ 0.116 -0.159 0.390 0.127 1.387 0.165 -0.048 0.279
d_trust_1 ~ frequ -0.001 -0.177 0.175 -0.002 -0.013 0.990 -0.106 0.104
frequ ~~ frequ 0.466 0.195 0.738 1.000 5.656 0.000 0.305 0.628

The moderation effect of the self-improvement behaviors with the trust change score (current-personality) is not significantly different from zero, b = -0.001, p = 0.99.

6.6.6.13 Organization - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7716.53 7804.46 0.957 0.076 0.043
# parameters of interest
params_lcs_organ_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_organ_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_organ_curr_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~ sb07_07_t1", "sb07_07_t1 ~~ sb07_07_t1", "d_organ_1 ~ sb07_07_t1", # change goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
Joining with `by = join_by(term)`
kable(params_lcs_organ_curr_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.016 NA NA 1.000 1.000
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.446 NA NA 1.000 1.000
d_organ_1 ~1 0.096 -0.051 0.243 0.196 2.157 0.031 0.009 0.184
organ_t1 ~1 3.142 2.947 3.337 2.812 53.083 0.000 3.026 3.258
d_organ_1 ~~ d_organ_1 0.234 -0.012 0.480 0.971 3.126 0.002 0.087 0.381
organ_t1 ~~ d_organ_1 -0.078 -0.237 0.081 -0.192 -1.622 0.105 -0.173 0.016
d_organ_1 ~ sb07_07_t1 0.083 -0.056 0.223 0.170 1.971 0.049 0.000 0.167
sb07_07_t1 ~~ sb07_07_t1 0.997 0.850 1.143 1.000 22.378 0.000 0.909 1.084

The moderation effect of the facet-specific change goal with the organization change score (current-personality) is not significantly different from zero, b = 0.083, p = 0.049.

6.6.6.14 Organization - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9172.423 9287.114 0.977 0.047 0.04
# parameters of interest
params_lcs_organ_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_organ_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_organ_curr_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~ frequ", "frequ ~~ frequ", "organ_t1 ~ frequ", # frequency of self improvement
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
Joining with `by = join_by(term)`
kable(params_lcs_organ_curr_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.014 NA NA 1.000 1.000
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.454 NA NA 1.000 1.000
d_organ_1 ~1 0.088 -0.050 0.226 0.192 2.093 0.036 0.006 0.170
organ_t1 ~1 3.144 2.897 3.392 3.067 41.801 0.000 2.997 3.292
d_organ_1 ~~ d_organ_1 0.210 -0.006 0.426 0.998 3.193 0.001 0.081 0.339
organ_t1 ~~ d_organ_1 -0.122 -0.282 0.038 -0.262 -2.513 0.012 -0.217 -0.027
organ_t1 ~ frequ 0.197 -0.175 0.569 0.131 1.742 0.082 -0.025 0.419
d_organ_1 ~ frequ 0.026 -0.202 0.255 0.039 0.378 0.706 -0.110 0.162
frequ ~~ frequ 0.467 0.192 0.742 1.000 5.590 0.000 0.303 0.631

The moderation effect of the frequency of self-improvement behaviors with the organization change score (current-personality) is not significantly different from zero, b = 0.026, p = 0.706.

6.6.6.15 Productiveness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7761.297 7849.227 0.953 0.075 0.055
# parameters of interest
params_lcs_produ_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_produ_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_produ_curr_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~ sb07_08_t1", "sb07_08_t1 ~~ sb07_08_t1", "d_produ_1 ~ sb07_08_t1", # change goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
Joining with `by = join_by(term)`
kable(params_lcs_produ_curr_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.019 NA NA 1.000 1.000
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.651 NA NA 1.000 1.000
d_produ_1 ~1 0.166 0.016 0.317 0.274 3.630 0.000 0.077 0.256
produ_t1 ~1 2.583 2.389 2.777 2.720 43.744 0.000 2.467 2.699
d_produ_1 ~~ d_produ_1 0.362 0.061 0.663 0.984 3.962 0.000 0.183 0.542
produ_t1 ~~ d_produ_1 -0.154 -0.300 -0.008 -0.350 -3.479 0.001 -0.241 -0.067
d_produ_1 ~ sb07_08_t1 0.077 -0.080 0.233 0.126 1.615 0.106 -0.016 0.170
sb07_08_t1 ~~ sb07_08_t1 0.997 0.778 1.215 1.000 14.989 0.000 0.866 1.127

The moderation effect of the facet-specific change goal with the productiveness change score (current-personality) is not significantly different from zero, b = 0.077, p = 0.106.

6.6.6.16 Productiveness - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9207.478 9322.17 0.956 0.062 0.053
# parameters of interest
params_lcs_produ_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_produ_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_produ_curr_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~ frequ", "frequ ~~ frequ", "produ_t1 ~ frequ", # frequency of self improvement
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
Joining with `by = join_by(term)`
kable(params_lcs_produ_curr_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.022 NA NA 1.000 1.000
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.657 NA NA 1.000 1.000
d_produ_1 ~1 0.162 0.011 0.314 0.271 3.523 0.000 0.072 0.253
produ_t1 ~1 2.583 2.359 2.807 2.770 37.950 0.000 2.450 2.717
d_produ_1 ~~ d_produ_1 0.354 0.049 0.659 0.985 3.822 0.000 0.172 0.536
produ_t1 ~~ d_produ_1 -0.206 -0.377 -0.035 -0.373 -3.966 0.000 -0.308 -0.104
produ_t1 ~ frequ 0.152 -0.204 0.509 0.111 1.406 0.160 -0.060 0.365
d_produ_1 ~ frequ 0.110 -0.158 0.377 0.124 1.349 0.177 -0.050 0.269
frequ ~~ frequ 0.462 0.185 0.739 1.000 5.492 0.000 0.297 0.627

The moderation effect of the frequency of self-improvement behaviors with the productiveness change score (current-personality) is not significantly different from zero, b = 0.11, p = 0.177.

6.6.6.17 Responsibility - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8011.811 8099.741 0.922 0.082 0.077
# parameters of interest
params_lcs_respo_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_respo_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_respo_curr_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~ sb07_09_t1", "sb07_09_t1 ~~ sb07_09_t1", "d_respo_1 ~ sb07_09_t1", # change goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
Joining with `by = join_by(term)`
kable(params_lcs_respo_curr_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.043 NA NA 1.000 1.000
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.550 NA NA 1.000 1.000
d_respo_1 ~1 0.057 -0.027 0.141 0.224 2.233 0.026 0.007 0.107
respo_t1 ~1 3.599 3.426 3.772 7.465 68.338 0.000 3.496 3.702
d_respo_1 ~~ d_respo_1 0.064 -0.022 0.149 0.985 2.450 0.014 0.013 0.114
respo_t1 ~~ d_respo_1 -0.035 -0.090 0.020 -0.323 -2.084 0.037 -0.068 -0.002
d_respo_1 ~ sb07_09_t1 0.031 -0.052 0.113 0.120 1.220 0.222 -0.019 0.080
sb07_09_t1 ~~ sb07_09_t1 0.997 0.856 1.137 1.000 23.307 0.000 0.913 1.080

The moderation effect of the facet-specific change goal with the responsibility change score (current-personality) is not significantly different from zero, b = 0.031, p = 0.222.

6.6.6.18 Responsibility - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9386.464 9501.155 0.921 0.074 0.08
# parameters of interest
params_lcs_respo_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_respo_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_respo_curr_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~ frequ", "frequ ~~ frequ", "respo_t1 ~ frequ", # frequency of self improvement
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
Joining with `by = join_by(term)`
kable(params_lcs_respo_curr_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.043 NA NA 1.000 1.000
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.551 NA NA 1.000 1.000
d_respo_1 ~1 0.057 -0.030 0.145 0.221 2.158 0.031 0.005 0.110
respo_t1 ~1 3.598 3.422 3.774 7.308 67.244 0.000 3.493 3.703
d_respo_1 ~~ d_respo_1 0.068 -0.026 0.161 1.000 2.379 0.017 0.012 0.123
respo_t1 ~~ d_respo_1 -0.044 -0.110 0.023 -0.342 -2.161 0.031 -0.083 -0.004
respo_t1 ~ frequ 0.048 -0.156 0.252 0.066 0.771 0.441 -0.074 0.169
d_respo_1 ~ frequ 0.001 -0.148 0.149 0.002 0.014 0.989 -0.088 0.089
frequ ~~ frequ 0.465 0.190 0.740 1.000 5.570 0.000 0.302 0.629

The moderation effect of the frequency of self-improvement behaviors with the responsibility change score (current-personality) is not significantly different from zero, b = 0.001, p = 0.989.

6.6.6.19 Anxiety - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8004.403 8092.333 0.993 0.026 0.037
# parameters of interest
params_lcs_anxie_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_anxie_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_anxie_curr_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~ sb07_10_t1", "sb07_10_t1 ~~ sb07_10_t1", "d_anxie_1 ~ sb07_10_t1", # change goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
Joining with `by = join_by(term)`
kable(params_lcs_anxie_curr_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.026 NA NA 1.000 1.000
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.473 NA NA 1.000 1.000
d_anxie_1 ~1 -0.212 -0.354 -0.070 -0.497 -4.918 0.000 -0.296 -0.127
anxie_t1 ~1 3.248 3.049 3.447 3.509 53.651 0.000 3.129 3.367
d_anxie_1 ~~ d_anxie_1 0.159 -0.007 0.324 0.872 3.159 0.002 0.060 0.258
anxie_t1 ~~ d_anxie_1 -0.019 -0.145 0.107 -0.069 -0.497 0.619 -0.094 0.056
d_anxie_1 ~ sb07_10_t1 -0.153 -0.299 -0.007 -0.358 -3.448 0.001 -0.240 -0.066
sb07_10_t1 ~~ sb07_10_t1 0.998 0.825 1.171 1.000 18.979 0.000 0.895 1.101

The frequency of self-improvement behaviors significantly moderates changes in anxiety (current-personality), b = -0.153, p = 0.001.

6.6.6.20 Anxiety - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9455.421 9570.113 0.977 0.04 0.046
# parameters of interest
params_lcs_anxie_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_anxie_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_anxie_curr_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~ frequ", "frequ ~~ frequ", "anxie_t1 ~ frequ", # frequency of self improvement
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
Joining with `by = join_by(term)`
kable(params_lcs_anxie_curr_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.029 NA NA 1.000 1.000
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.472 NA NA 1.000 1.000
d_anxie_1 ~1 -0.217 -0.366 -0.068 -0.502 -4.795 0.000 -0.306 -0.128
anxie_t1 ~1 3.252 3.026 3.479 3.448 47.242 0.000 3.117 3.387
d_anxie_1 ~~ d_anxie_1 0.185 -0.001 0.371 0.992 3.273 0.001 0.074 0.296
anxie_t1 ~~ d_anxie_1 -0.118 -0.295 0.060 -0.290 -2.185 0.029 -0.223 -0.012
anxie_t1 ~ frequ 0.026 -0.341 0.393 0.019 0.234 0.815 -0.193 0.245
d_anxie_1 ~ frequ -0.058 -0.316 0.201 -0.092 -0.736 0.462 -0.212 0.096
frequ ~~ frequ 0.470 0.192 0.749 1.000 5.553 0.000 0.304 0.637

The moderation effect of the frequency of self-improvement behaviors with the anxiety change score (current-personality) is not significantly different from zero, b = -0.058, p = 0.462.

6.6.6.21 Depression - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7863.828 7951.758 0.956 0.079 0.055
# parameters of interest
params_lcs_depre_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_depre_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_depre_curr_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~ sb07_11_t1", "sb07_11_t1 ~~ sb07_11_t1", "d_depre_1 ~ sb07_11_t1", # change goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
Joining with `by = join_by(term)`
kable(params_lcs_depre_curr_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.055 NA NA 1.000 1.000
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.583 NA NA 1.000 1.000
d_depre_1 ~1 -0.112 -0.211 -0.013 -0.310 -3.718 0.000 -0.171 -0.053
depre_t1 ~1 2.960 2.774 3.146 4.533 52.266 0.000 2.849 3.071
d_depre_1 ~~ d_depre_1 0.127 0.023 0.231 0.972 4.005 0.000 0.065 0.189
depre_t1 ~~ d_depre_1 -0.058 -0.129 0.014 -0.369 -2.639 0.008 -0.100 -0.015
d_depre_1 ~ sb07_11_t1 -0.060 -0.146 0.026 -0.166 -2.306 0.021 -0.111 -0.009
sb07_11_t1 ~~ sb07_11_t1 0.996 0.874 1.118 1.000 26.876 0.000 0.924 1.069

The moderation effect of the facet-specific change goal with the depression change score (current-personality) is not significantly different from zero, b = -0.06, p = 0.021.

6.6.6.22 Depression - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9409.123 9523.815 0.928 0.084 0.079
# parameters of interest
params_lcs_depre_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_depre_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_depre_curr_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~ frequ", "frequ ~~ frequ", "depre_t1 ~ frequ", # frequency of self improvement
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
Joining with `by = join_by(term)`
kable(params_lcs_depre_curr_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.057 NA NA 1.000 1.000
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.588 NA NA 1.000 1.000
d_depre_1 ~1 -0.117 -0.221 -0.014 -0.316 -3.723 0.000 -0.179 -0.056
depre_t1 ~1 2.963 2.760 3.166 4.429 48.089 0.000 2.842 3.084
d_depre_1 ~~ d_depre_1 0.138 0.023 0.253 0.996 3.942 0.000 0.069 0.207
depre_t1 ~~ d_depre_1 -0.092 -0.183 -0.002 -0.372 -3.353 0.001 -0.146 -0.038
depre_t1 ~ frequ 0.014 -0.237 0.264 0.014 0.181 0.857 -0.135 0.163
d_depre_1 ~ frequ -0.034 -0.191 0.123 -0.062 -0.707 0.479 -0.127 0.060
frequ ~~ frequ 0.467 0.187 0.746 1.000 5.497 0.000 0.300 0.633

The moderation effect of the frequency of self-improvement behaviors with the depression change score (current-personality) is not significantly different from zero, b = -0.034, p = 0.479.

6.6.6.23 Volatility - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8098.622 8186.552 0.989 0.036 0.032
# parameters of interest
params_lcs_volat_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_volat_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_volat_curr_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~ sb07_12_t1", "sb07_12_t1 ~~ sb07_12_t1", "d_volat_1 ~ sb07_12_t1", # change goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
Joining with `by = join_by(term)`
kable(params_lcs_volat_curr_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.159 NA NA 1.000 1.000
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.666 NA NA 1.000 1.000
d_volat_1 ~1 -0.179 -0.328 -0.030 -0.313 -3.954 0.000 -0.268 -0.090
volat_t1 ~1 3.118 2.895 3.340 3.136 46.173 0.000 2.985 3.250
d_volat_1 ~~ d_volat_1 0.325 0.110 0.541 0.995 4.971 0.000 0.197 0.454
volat_t1 ~~ d_volat_1 -0.276 -0.455 -0.098 -0.519 -5.092 0.000 -0.382 -0.170
d_volat_1 ~ sb07_12_t1 -0.040 -0.196 0.117 -0.069 -0.829 0.407 -0.133 0.054
sb07_12_t1 ~~ sb07_12_t1 0.997 0.844 1.150 1.000 21.428 0.000 0.906 1.088

The moderation effect of the facet-specific change goal with the volatility change score (current-personality) is not significantly different from zero, b = -0.04, p = 0.407.

6.6.6.24 Volatility - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9453.177 9567.869 1 0 0.028
# parameters of interest
params_lcs_volat_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_volat_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_volat_curr_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~ frequ", "frequ ~~ frequ", "volat_t1 ~ frequ", # frequency of self improvement
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
Joining with `by = join_by(term)`
kable(params_lcs_volat_curr_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.158 NA NA 1.000 1.000
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.664 NA NA 1.000 1.000
d_volat_1 ~1 -0.177 -0.325 -0.029 -0.313 -3.936 0.000 -0.265 -0.089
volat_t1 ~1 3.117 2.883 3.351 3.161 43.892 0.000 2.978 3.256
d_volat_1 ~~ d_volat_1 0.320 0.108 0.532 0.998 4.965 0.000 0.194 0.446
volat_t1 ~~ d_volat_1 -0.283 -0.459 -0.107 -0.507 -5.287 0.000 -0.387 -0.178
volat_t1 ~ frequ -0.050 -0.406 0.305 -0.035 -0.466 0.641 -0.262 0.161
d_volat_1 ~ frequ 0.040 -0.235 0.315 0.049 0.481 0.631 -0.123 0.204
frequ ~~ frequ 0.468 0.195 0.740 1.000 5.651 0.000 0.306 0.630

The moderation effect of the frequency of self-improvement behaviors with the volatility change score (current-personality) is significantly different from zero, b = 0.04, p = 0.631.

6.6.6.25 Curiosity - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7926.527 8014.457 0.994 0.02 0.037
# parameters of interest
params_lcs_curio_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_curio_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_curio_curr_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~ sb07_13_t1", "sb07_13_t1 ~~ sb07_13_t1", "d_curio_1 ~ sb07_13_t1", # change goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
Joining with `by = join_by(term)`
kable(params_lcs_curio_curr_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.992 NA NA 1.000 1.000
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.434 NA NA 1.000 1.000
d_curio_1 ~1 0.038 -0.042 0.119 0.198 1.562 0.118 -0.010 0.086
curio_t1 ~1 4.182 4.040 4.323 9.476 97.097 0.000 4.097 4.266
d_curio_1 ~~ d_curio_1 0.034 -0.028 0.097 0.913 1.791 0.073 -0.003 0.071
curio_t1 ~~ d_curio_1 -0.008 -0.057 0.041 -0.107 -0.548 0.584 -0.037 0.021
d_curio_1 ~ sb07_13_t1 0.057 -0.026 0.140 0.296 2.264 0.024 0.008 0.107
sb07_13_t1 ~~ sb07_13_t1 0.997 0.810 1.184 1.000 17.525 0.000 0.886 1.109

The moderation effect of the facet-specific change goal with the curiosity change score (current-personality) is not significantly different from zero, b = 0.057, p = 0.024.

6.6.6.26 Curiosity - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9256.658 9371.35 0.981 0.033 0.051
# parameters of interest
params_lcs_curio_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_curio_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_curio_curr_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~ frequ", "frequ ~~ frequ", "curio_t1 ~ frequ", # frequency of self improvement
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
Joining with `by = join_by(term)`
kable(params_lcs_curio_curr_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.993 NA NA 1.000 1.000
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.429 NA NA 1.000 1.000
d_curio_1 ~1 0.037 -0.044 0.119 0.196 1.518 0.129 -0.011 0.086
curio_t1 ~1 4.182 4.035 4.329 9.450 93.719 0.000 4.095 4.269
d_curio_1 ~~ d_curio_1 0.031 -0.029 0.092 0.861 1.709 0.088 -0.005 0.068
curio_t1 ~~ d_curio_1 -0.020 -0.072 0.032 -0.258 -1.280 0.201 -0.051 0.011
curio_t1 ~ frequ 0.065 -0.132 0.263 0.101 1.091 0.275 -0.052 0.183
d_curio_1 ~ frequ 0.104 -0.031 0.240 0.373 2.531 0.011 0.024 0.185
frequ ~~ frequ 0.466 0.190 0.742 1.000 5.559 0.000 0.302 0.630

The moderation effect of the frequency of self-improvement behaviors with the curiosity change score (current-personality) is not significantly different from zero (at p < .001), b = 0.104, p = 0.011.

6.6.6.27 Aesthetic - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8167.561 8255.491 0.999 0.01 0.035
# parameters of interest
params_lcs_aesth_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_aesth_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_aesth_curr_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~ sb07_14_t1", "sb07_14_t1 ~~ sb07_14_t1", "d_aesth_1 ~ sb07_14_t1", # change goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
Joining with `by = join_by(term)`
kable(params_lcs_aesth_curr_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 1.001 NA NA 1.000 1.000
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.488 NA NA 1.000 1.000
d_aesth_1 ~1 0.007 -0.024 0.039 0.074 0.767 0.443 -0.011 0.026
aesth_t1 ~1 3.066 2.858 3.274 15.137 48.480 0.000 2.942 3.190
d_aesth_1 ~~ d_aesth_1 0.010 -0.016 0.036 1.000 1.223 0.221 -0.006 0.025
aesth_t1 ~~ d_aesth_1 -0.005 -0.020 0.010 -0.245 -1.053 0.293 -0.014 0.004
d_aesth_1 ~ sb07_14_t1 -0.002 -0.032 0.029 -0.019 -0.205 0.838 -0.020 0.016
sb07_14_t1 ~~ sb07_14_t1 0.997 0.845 1.149 1.000 21.634 0.000 0.907 1.087

The moderation effect of the facet-specific change goal with the aesthetic change score (current-personality) is not significantly different from zero, b = -0.002, p = 0.838.

6.6.6.28 Aesthetic - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9473.658 9588.349 0.99 0.028 0.047
# parameters of interest
params_lcs_aesth_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_aesth_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_aesth_curr_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~ frequ", "frequ ~~ frequ", "aesth_t1 ~ frequ", # frequency of self improvement
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
Joining with `by = join_by(term)`
kable(params_lcs_aesth_curr_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 1.000 NA NA 1.000 1.000
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.488 NA NA 1.000 1.000
d_aesth_1 ~1 0.007 -0.024 0.039 0.075 0.776 0.438 -0.011 0.026
aesth_t1 ~1 3.066 2.857 3.274 14.944 48.467 0.000 2.942 3.190
d_aesth_1 ~~ d_aesth_1 0.010 -0.017 0.037 0.997 1.236 0.217 -0.006 0.026
aesth_t1 ~~ d_aesth_1 -0.005 -0.020 0.010 -0.238 -1.038 0.299 -0.014 0.004
aesth_t1 ~ frequ 0.065 -0.053 0.183 0.216 1.806 0.071 -0.006 0.135
d_aesth_1 ~ frequ -0.008 -0.060 0.045 -0.053 -0.490 0.624 -0.039 0.023
frequ ~~ frequ 0.466 0.185 0.746 1.000 5.463 0.000 0.299 0.633

The moderation effect of the frequency of self-improvement behaviors with the aesthetic change score (current-personality) is not significantly different from zero, b = -0.008, p = 0.624.

6.6.6.29 Imagination - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7740.569 7828.499 0.951 0.065 0.053
# parameters of interest
params_lcs_imagi_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_imagi_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_imagi_curr_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~ sb07_15_t1", "sb07_15_t1 ~~ sb07_15_t1", "d_imagi_1 ~ sb07_15_t1", # change goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
Joining with `by = join_by(term)`
kable(params_lcs_imagi_curr_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.020 NA NA 1.000 1.000
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.481 NA NA 1.000 1.000
d_imagi_1 ~1 0.111 0.002 0.220 0.328 3.337 0.001 0.046 0.176
imagi_t1 ~1 3.645 3.480 3.811 5.075 72.507 0.000 3.547 3.744
d_imagi_1 ~~ d_imagi_1 0.114 -0.007 0.236 0.999 3.106 0.002 0.042 0.187
imagi_t1 ~~ d_imagi_1 -0.065 -0.168 0.039 -0.284 -2.054 0.040 -0.126 -0.003
d_imagi_1 ~ sb07_15_t1 0.011 -0.097 0.119 0.031 0.322 0.748 -0.054 0.075
sb07_15_t1 ~~ sb07_15_t1 0.997 0.847 1.147 1.000 21.908 0.000 0.908 1.086

The moderation effect of the facet-specific change goal with the imagination change score (current-personality) is not significantly different from zero, b = 0.011, p = 0.748.

6.6.6.30 Imagination - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9075.154 9189.845 0.962 0.052 0.052
# parameters of interest
params_lcs_imagi_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_imagi_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_imagi_curr_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~ frequ", "frequ ~~ frequ", "imagi_t1 ~ frequ", # frequency of self improvement
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
Joining with `by = join_by(term)`
kable(params_lcs_imagi_curr_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.023 NA NA 1.000 1.000
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.488 NA NA 1.000 1.000
d_imagi_1 ~1 0.110 -0.002 0.222 0.317 3.243 0.001 0.044 0.177
imagi_t1 ~1 3.644 3.476 3.812 4.989 71.301 0.000 3.544 3.744
d_imagi_1 ~~ d_imagi_1 0.119 -0.006 0.245 0.984 3.143 0.002 0.045 0.194
imagi_t1 ~~ d_imagi_1 -0.080 -0.191 0.030 -0.327 -2.385 0.017 -0.146 -0.014
imagi_t1 ~ frequ 0.255 -0.042 0.552 0.237 2.821 0.005 0.078 0.432
d_imagi_1 ~ frequ 0.065 -0.128 0.257 0.126 1.107 0.268 -0.050 0.179
frequ ~~ frequ 0.460 0.195 0.725 1.000 5.707 0.000 0.302 0.618

The moderation effect of the frequency of self-improvement behaviors with the imagination change score (current-personality) is not significantly different from zero, b = 0.065, p = 0.268.

6.6.7 Big Five facets (current personality - follow-up T3)

6.6.7.1 Sociability - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 6792.921 6877.565 0.965 0.066 0.049
# parameters of interest
params_lcs_socia_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_socia_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_socia_curr_specif_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("socia_t3 ~ socia_t2", "d_socia_1 =~ socia_t3", "socia_t2 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~ sb07_01_t1", "sb07_01_t1 ~~ sb07_01_t1", "d_socia_1 ~ sb07_01_t1", # change goals
                     "d_socia_1 ~1 ", "socia_t2 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
Joining with `by = join_by(term)`
kable(params_lcs_socia_curr_specif_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
socia_t3 ~ socia_t2 1.000 1.000 1.000 0.974 NA NA 1.000 1.000
d_socia_1 =~ socia_t3 1.000 1.000 1.000 0.475 NA NA 1.000 1.000
d_socia_1 ~1 0.047 -0.062 0.157 0.131 1.422 0.155 -0.018 0.113
socia_t2 ~1 3.069 2.859 3.279 4.150 48.000 0.000 2.944 3.194
d_socia_1 ~~ d_socia_1 0.129 0.011 0.248 0.995 3.602 0.000 0.059 0.200
socia_t2 ~~ d_socia_1 -0.042 -0.131 0.047 -0.176 -1.537 0.124 -0.095 0.011
d_socia_1 ~ sb07_01_t1 0.025 -0.103 0.153 0.069 0.645 0.519 -0.051 0.101
sb07_01_t1 ~~ sb07_01_t1 0.991 0.767 1.214 1.000 14.600 0.000 0.858 1.124

The moderation effect of the facet-specific change goal with the sociability change score (current-personality) from T2 to T3 is not significantly different from zero, b = 0.025, p = 0.519.

6.6.7.2 Sociability - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8288.897 8399.302 0.954 0.067 0.069
# parameters of interest
params_lcs_socia_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_socia_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_socia_curr_frequ_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("socia_t3 ~ socia_t2", "d_socia_1 =~ socia_t3", "socia_t2 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~ frequ", "frequ ~~ frequ", "socia_t2 ~ frequ", # frequency of self improvement
                           "d_socia_1 ~1 ", "socia_t2 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
Joining with `by = join_by(term)`
kable(params_lcs_socia_curr_frequ_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
socia_t3 ~ socia_t2 1.000 1.000 1.000 0.973 NA NA 1.000 1.000
d_socia_1 =~ socia_t3 1.000 1.000 1.000 0.475 NA NA 1.000 1.000
d_socia_1 ~1 0.047 -0.060 0.154 0.133 1.438 0.150 -0.017 0.111
socia_t2 ~1 3.059 2.834 3.283 4.242 44.839 0.000 2.925 3.193
d_socia_1 ~~ d_socia_1 0.124 0.006 0.241 0.998 3.460 0.001 0.054 0.193
socia_t2 ~~ d_socia_1 -0.047 -0.141 0.047 -0.186 -1.640 0.101 -0.103 0.009
socia_t2 ~ frequ 0.026 -0.256 0.308 0.025 0.303 0.762 -0.142 0.194
d_socia_1 ~ frequ -0.021 -0.199 0.156 -0.042 -0.396 0.692 -0.127 0.084
frequ ~~ frequ 0.470 0.190 0.749 1.000 5.524 0.000 0.303 0.636

The moderation effect of the frequency of self-improvement behaviors with the sociability change score from T2 to T3 (current-personality) is not significantly different from zero, b = -0.021, p = 0.692.

6.6.7.3 Assertiveness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 7108.32 7192.964 0.962 0.059 0.05
# parameters of interest
params_lcs_asser_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_asser_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_asser_curr_specif_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("asser_t3 ~ asser_t2", "d_asser_1 =~ asser_t3", "asser_t2 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~ sb07_02_t1", "sb07_02_t1 ~~ sb07_02_t1", "d_asser_1 ~ sb07_02_t1", # change goals
                     "d_asser_1 ~1 ", "asser_t2 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
Joining with `by = join_by(term)`
kable(params_lcs_asser_curr_specif_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
asser_t3 ~ asser_t2 1.000 1.000 1.000 1.001 NA NA 1.000 1.000
d_asser_1 =~ asser_t3 1.000 1.000 1.000 0.494 NA NA 1.000 1.000
d_asser_1 ~1 0.020 -0.063 0.103 0.075 0.809 0.419 -0.029 0.070
asser_t2 ~1 3.171 2.970 3.373 5.765 51.672 0.000 3.051 3.292
d_asser_1 ~~ d_asser_1 0.073 -0.039 0.184 0.983 2.138 0.033 0.006 0.139
asser_t2 ~~ d_asser_1 -0.033 -0.095 0.029 -0.226 -1.728 0.084 -0.070 0.004
d_asser_1 ~ sb07_02_t1 0.035 -0.053 0.123 0.129 1.308 0.191 -0.017 0.088
sb07_02_t1 ~~ sb07_02_t1 0.997 0.797 1.198 1.000 16.348 0.000 0.878 1.117

The moderation effect of the facet-specific change goal with the assertiveness change score from T2 to T3 (current-personality) is not significantly different from zero, b = 0.035, p = 0.191.

6.6.7.4 Assertiveness - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8541.799 8652.204 0.992 0.026 0.043
# parameters of interest
params_lcs_asser_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_asser_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_asser_curr_frequ_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("asser_t3 ~ asser_t2", "d_asser_1 =~ asser_t3", "asser_t2 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~ frequ", "frequ ~~ frequ", "asser_t2 ~ frequ", # frequency of self improvement
                           "d_asser_1 ~1 ", "asser_t2 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
Joining with `by = join_by(term)`
kable(params_lcs_asser_curr_frequ_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
asser_t3 ~ asser_t2 1.000 1.000 1.000 1.000 NA NA 1.000 1.000
d_asser_1 =~ asser_t3 1.000 1.000 1.000 0.505 NA NA 1.000 1.000
d_asser_1 ~1 0.019 -0.053 0.090 0.074 0.861 0.389 -0.024 0.061
asser_t2 ~1 3.174 2.967 3.382 6.356 50.321 0.000 3.051 3.298
d_asser_1 ~~ d_asser_1 0.064 -0.033 0.160 1.000 2.166 0.030 0.006 0.121
asser_t2 ~~ d_asser_1 -0.032 -0.084 0.020 -0.260 -1.998 0.046 -0.063 -0.001
asser_t2 ~ frequ 0.189 -0.008 0.385 0.257 3.160 0.002 0.072 0.306
d_asser_1 ~ frequ -0.001 -0.126 0.124 -0.004 -0.036 0.971 -0.076 0.073
frequ ~~ frequ 0.461 0.194 0.729 1.000 5.669 0.000 0.302 0.621

The moderation effect of the frequency of self-improvement behaviors with the assertiveness change score from T2 to T3 (current-personality) is not significantly different from zero, b = -0.001, p = 0.971.

6.6.7.5 Energy - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 7092.565 7177.209 0.962 0.057 0.062
# parameters of interest
params_lcs_energ_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_energ_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_energ_curr_specif_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("energ_t3 ~ energ_t2", "d_energ_1 =~ energ_t3", "energ_t2 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~ sb07_03_t1", "sb07_03_t1 ~~ sb07_03_t1", "d_energ_1 ~ sb07_03_t1", # change goals
                     "d_energ_1 ~1 ", "energ_t2 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
Joining with `by = join_by(term)`
kable(params_lcs_energ_curr_specif_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
energ_t3 ~ energ_t2 1.000 1.000 1.000 1.016 NA NA 1.000 1.000
d_energ_1 =~ energ_t3 1.000 1.000 1.000 0.619 NA NA 1.000 1.000
d_energ_1 ~1 0.002 -0.043 0.047 0.013 0.154 0.877 -0.025 0.029
energ_t2 ~1 3.299 3.111 3.487 12.272 57.685 0.000 3.187 3.411
d_energ_1 ~~ d_energ_1 0.027 -0.024 0.078 1.000 1.720 0.085 -0.004 0.057
energ_t2 ~~ d_energ_1 -0.015 -0.046 0.017 -0.353 -1.538 0.124 -0.033 0.004
d_energ_1 ~ sb07_03_t1 -0.002 -0.043 0.039 -0.012 -0.152 0.879 -0.026 0.023
sb07_03_t1 ~~ sb07_03_t1 1.014 0.788 1.240 1.000 14.753 0.000 0.879 1.149

The moderation effect of the facet-specific change goal with the energy change score from T2 to T3 (current-personality) is not significantly different from zero, b = -0.002, p = 0.879.

6.6.7.6 Energy - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8544.934 8655.339 0.957 0.056 0.063
# parameters of interest
params_lcs_energ_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_energ_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_energ_curr_frequ_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("energ_t3 ~ energ_t2", "d_energ_1 =~ energ_t3", "energ_t2 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~ frequ", "frequ ~~ frequ", "energ_t2 ~ frequ", # frequency of self improvement
                           "d_energ_1 ~1 ", "energ_t2 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
Joining with `by = join_by(term)`
kable(params_lcs_energ_curr_frequ_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
energ_t3 ~ energ_t2 1.000 1.000 1.000 1.019 NA NA 1.000 1.000
d_energ_1 =~ energ_t3 1.000 1.000 1.000 0.620 NA NA 1.000 1.000
d_energ_1 ~1 0.003 -0.048 0.053 0.015 0.172 0.863 -0.027 0.033
energ_t2 ~1 3.300 3.111 3.489 11.273 57.411 0.000 3.188 3.413
d_energ_1 ~~ d_energ_1 0.032 -0.028 0.091 1.000 1.751 0.080 -0.004 0.067
energ_t2 ~~ d_energ_1 -0.017 -0.052 0.017 -0.343 -1.640 0.101 -0.038 0.003
energ_t2 ~ frequ 0.121 -0.081 0.322 0.276 1.965 0.049 0.000 0.241
d_energ_1 ~ frequ -0.005 -0.105 0.095 -0.018 -0.155 0.877 -0.064 0.055
frequ ~~ frequ 0.451 0.181 0.721 1.000 5.502 0.000 0.290 0.611

The moderation effect of the frequency of self-improvement behaviors with the energy change score from T2 to T3 (current-personality) is not significantly different from zero, b = -0.005, p = 0.877.

6.6.7.7 Compassion - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 6888.722 6973.366 0.947 0.06 0.062
# parameters of interest
params_lcs_compa_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_compa_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_compa_curr_specif_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("compa_t3 ~ compa_t2", "d_compa_1 =~ compa_t3", "compa_t2 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~ sb07_04_t1", "sb07_04_t1 ~~ sb07_04_t1", "d_compa_1 ~ sb07_04_t1", # change goals
                     "d_compa_1 ~1 ", "compa_t2 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
Joining with `by = join_by(term)`
kable(params_lcs_compa_curr_specif_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
compa_t3 ~ compa_t2 1.000 1.000 1.000 0.915 NA NA 1.000 1.000
d_compa_1 =~ compa_t3 1.000 1.000 1.000 0.391 NA NA 1.000 1.000
d_compa_1 ~1 -0.051 -0.168 0.066 -0.193 -1.443 0.149 -0.121 0.018
compa_t2 ~1 4.280 4.126 4.434 6.893 91.415 0.000 4.189 4.372
d_compa_1 ~~ d_compa_1 0.055 -0.091 0.202 0.790 1.245 0.213 -0.032 0.143
compa_t2 ~~ d_compa_1 -0.014 -0.145 0.117 -0.098 -0.352 0.725 -0.092 0.064
d_compa_1 ~ sb07_04_t1 -0.122 -0.263 0.020 -0.458 -2.832 0.005 -0.206 -0.037
sb07_04_t1 ~~ sb07_04_t1 0.998 0.823 1.173 1.000 18.759 0.000 0.894 1.102

The moderation effect of the facet-specific change goal with the compassion change score from T2 to T3 (current-personality) is not significantly different from zero (at p < . 001), b = -0.122, p = 0.005.

6.6.7.8 Compassion - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8340.994 8451.399 0.926 0.068 0.081
# parameters of interest
params_lcs_compa_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_compa_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_compa_curr_frequ_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("compa_t3 ~ compa_t2", "d_compa_1 =~ compa_t3", "compa_t2 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~ frequ", "frequ ~~ frequ", "compa_t2 ~ frequ", # frequency of self improvement
                           "d_compa_1 ~1 ", "compa_t2 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
Joining with `by = join_by(term)`
kable(params_lcs_compa_curr_frequ_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
compa_t3 ~ compa_t2 1.000 1.000 1.000 0.917 NA NA 1.000 1.000
d_compa_1 =~ compa_t3 1.000 1.000 1.000 0.371 NA NA 1.000 1.000
d_compa_1 ~1 -0.058 -0.192 0.077 -0.215 -1.412 0.158 -0.137 0.022
compa_t2 ~1 4.280 4.123 4.436 6.467 89.925 0.000 4.186 4.373
d_compa_1 ~~ d_compa_1 0.070 -0.104 0.244 0.977 1.329 0.184 -0.033 0.174
compa_t2 ~~ d_compa_1 0.014 -0.149 0.178 0.087 0.292 0.770 -0.083 0.112
compa_t2 ~ frequ 0.311 0.034 0.588 0.327 3.695 0.000 0.146 0.476
d_compa_1 ~ frequ -0.059 -0.243 0.124 -0.153 -1.058 0.290 -0.168 0.050
frequ ~~ frequ 0.485 0.205 0.765 1.000 5.698 0.000 0.318 0.651

The moderation effect of the frequency of self-improvement behaviors with the compassion change score from T2 to T3 (current-personality) is not significantly different from zero, b = -0.059, p = 0.29.

6.6.7.9 Respectfulness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 5983.266 6067.91 0.986 0.034 0.045
# parameters of interest
params_lcs_respe_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_respe_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_respe_curr_specif_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("respe_t3 ~ respe_t2", "d_respe_1 =~ respe_t3", "respe_t2 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~ sb07_05_t1", "sb07_05_t1 ~~ sb07_05_t1", "d_respe_1 ~ sb07_05_t1", # change goals
                     "d_respe_1 ~1 ", "respe_t2 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
Joining with `by = join_by(term)`
kable(params_lcs_respe_curr_specif_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
respe_t3 ~ respe_t2 1.000 1.000 1.000 0.918 NA NA 1.000 1.000
d_respe_1 =~ respe_t3 1.000 1.000 1.000 0.366 NA NA 1.000 1.000
d_respe_1 ~1 0.005 -0.069 0.080 0.030 0.222 0.824 -0.039 0.049
respe_t2 ~1 4.496 4.384 4.607 10.583 132.960 0.000 4.429 4.562
d_respe_1 ~~ d_respe_1 0.028 -0.027 0.084 0.990 1.680 0.093 -0.005 0.062
respe_t2 ~~ d_respe_1 0.005 -0.037 0.046 0.072 0.388 0.698 -0.020 0.030
d_respe_1 ~ sb07_05_t1 0.017 -0.057 0.091 0.101 0.758 0.448 -0.027 0.061
sb07_05_t1 ~~ sb07_05_t1 1.010 0.797 1.222 1.000 15.617 0.000 0.883 1.136

The moderation effect of the facet-specific change goal with the respectfulness change score from T2 to T3 (current-personality) is not significantly different from zero, b = 0.017, p = 0.448.

6.6.7.10 Respectfulness - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 7434.27 7544.676 0.974 0.043 0.052
# parameters of interest
params_lcs_respe_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_respe_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_respe_curr_frequ_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("respe_t3 ~ respe_t2", "d_respe_1 =~ respe_t3", "respe_t2 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~ frequ", "frequ ~~ frequ", "respe_t2 ~ frequ", # frequency of self improvement
                           "d_respe_1 ~1 ", "respe_t2 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
Joining with `by = join_by(term)`
kable(params_lcs_respe_curr_frequ_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
respe_t3 ~ respe_t2 1.000 1.000 1.000 0.917 NA NA 1.000 1.000
d_respe_1 =~ respe_t3 1.000 1.000 1.000 0.367 NA NA 1.000 1.000
d_respe_1 ~1 0.006 -0.069 0.080 0.034 0.257 0.797 -0.039 0.050
respe_t2 ~1 4.489 4.373 4.606 10.600 127.169 0.000 4.420 4.559
d_respe_1 ~~ d_respe_1 0.028 -0.028 0.084 0.970 1.651 0.099 -0.005 0.061
respe_t2 ~~ d_respe_1 0.005 -0.038 0.049 0.079 0.411 0.681 -0.020 0.031
respe_t2 ~ frequ 0.145 -0.022 0.313 0.235 2.851 0.004 0.045 0.245
d_respe_1 ~ frequ -0.043 -0.157 0.071 -0.173 -1.232 0.218 -0.111 0.025
frequ ~~ frequ 0.472 0.199 0.745 1.000 5.691 0.000 0.309 0.634

The moderation effect of the frequency of self-improvement behaviors with the respectfulness change score from T2 to T3 (current-personality) is not significantly different from zero, b = -0.043, p = 0.218.

6.6.7.11 Trust - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 7224.597 7309.241 0.965 0.051 0.053
# parameters of interest
params_lcs_trust_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_trust_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_trust_curr_specif_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("trust_t3 ~ trust_t2", "d_trust_1 =~ trust_t3", "trust_t2 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~ sb07_06_t1", "sb07_06_t1 ~~ sb07_06_t1", "d_trust_1 ~ sb07_06_t1", # change goals
                     "d_trust_1 ~1 ", "trust_t2 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
Joining with `by = join_by(term)`
kable(params_lcs_trust_curr_specif_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
trust_t3 ~ trust_t2 1.000 1.000 1.000 0.960 NA NA 1.000 1.000
d_trust_1 =~ trust_t3 1.000 1.000 1.000 0.329 NA NA 1.000 1.000
d_trust_1 ~1 -0.009 -0.102 0.084 -0.048 -0.306 0.760 -0.064 0.047
trust_t2 ~1 3.290 3.074 3.506 6.214 50.074 0.000 3.161 3.418
d_trust_1 ~~ d_trust_1 0.033 -0.042 0.107 0.998 1.448 0.148 -0.012 0.077
trust_t2 ~~ d_trust_1 -0.005 -0.072 0.062 -0.053 -0.247 0.805 -0.045 0.035
d_trust_1 ~ sb07_06_t1 -0.008 -0.107 0.090 -0.047 -0.283 0.777 -0.067 0.050
sb07_06_t1 ~~ sb07_06_t1 1.007 0.840 1.175 1.000 19.773 0.000 0.908 1.107

The moderation effect of the facet-specific change goal with the trust change score from T2 to T3 (current-personality) is not significantly different from zero, b = -0.008, p = 0.777.

6.6.7.12 Trust - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8658.858 8769.264 0.97 0.044 0.06
# parameters of interest
params_lcs_trust_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_trust_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_trust_curr_frequ_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("trust_t3 ~ trust_t2", "d_trust_1 =~ trust_t3", "trust_t2 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~ frequ", "frequ ~~ frequ", "trust_t2 ~ frequ", # frequency of self improvement
                           "d_trust_1 ~1 ", "trust_t2 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
Joining with `by = join_by(term)`
kable(params_lcs_trust_curr_frequ_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
trust_t3 ~ trust_t2 1.000 1.000 1.000 0.961 NA NA 1.000 1.000
d_trust_1 =~ trust_t3 1.000 1.000 1.000 0.332 NA NA 1.000 1.000
d_trust_1 ~1 -0.008 -0.095 0.079 -0.046 -0.300 0.764 -0.060 0.044
trust_t2 ~1 3.288 3.072 3.504 6.634 50.105 0.000 3.159 3.417
d_trust_1 ~~ d_trust_1 0.029 -0.037 0.095 0.998 1.460 0.144 -0.010 0.069
trust_t2 ~~ d_trust_1 -0.005 -0.064 0.054 -0.061 -0.282 0.778 -0.040 0.030
trust_t2 ~ frequ 0.125 -0.096 0.347 0.173 1.862 0.063 -0.007 0.258
d_trust_1 ~ frequ 0.010 -0.140 0.161 0.042 0.229 0.819 -0.079 0.100
frequ ~~ frequ 0.467 0.196 0.737 1.000 5.675 0.000 0.305 0.628

The moderation effect of the self-improvement behaviors with the trust change score from T2 to T3 (current-personality) is not significantly different from zero, b = 0.01, p = 0.819.

6.6.7.13 Organization - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 6564.605 6649.249 0.965 0.07 0.04
# parameters of interest
params_lcs_organ_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_organ_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_organ_curr_specif_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("organ_t3 ~ organ_t2", "d_organ_1 =~ organ_t3", "organ_t2 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~ sb07_07_t1", "sb07_07_t1 ~~ sb07_07_t1", "d_organ_1 ~ sb07_07_t1", # change goals
                     "d_organ_1 ~1 ", "organ_t2 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
Joining with `by = join_by(term)`
kable(params_lcs_organ_curr_specif_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
organ_t3 ~ organ_t2 1.000 1.000 1.000 1.027 NA NA 1.000 1.000
d_organ_1 =~ organ_t3 1.000 1.000 1.000 0.466 NA NA 1.000 1.000
d_organ_1 ~1 0.073 -0.081 0.228 0.151 1.566 0.117 -0.018 0.165
organ_t2 ~1 3.254 3.042 3.466 3.031 50.500 0.000 3.127 3.380
d_organ_1 ~~ d_organ_1 0.232 -0.047 0.511 0.977 2.731 0.006 0.065 0.398
organ_t2 ~~ d_organ_1 -0.102 -0.292 0.088 -0.243 -1.761 0.078 -0.215 0.012
d_organ_1 ~ sb07_07_t1 0.075 -0.068 0.218 0.153 1.725 0.085 -0.010 0.160
sb07_07_t1 ~~ sb07_07_t1 0.992 0.834 1.149 1.000 20.736 0.000 0.898 1.086

The moderation effect of the facet-specific change goal with the organization change score from T2 to T3 (current-personality) is not significantly different from zero, b = 0.075, p = 0.085.

6.6.7.14 Organization - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8094.503 8204.908 0.974 0.051 0.043
# parameters of interest
params_lcs_organ_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_organ_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_organ_curr_frequ_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("organ_t3 ~ organ_t2", "d_organ_1 =~ organ_t3", "organ_t2 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~ frequ", "frequ ~~ frequ", "organ_t2 ~ frequ", # frequency of self improvement
                           "d_organ_1 ~1 ", "organ_t2 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
Joining with `by = join_by(term)`
kable(params_lcs_organ_curr_frequ_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
organ_t3 ~ organ_t2 1.000 1.000 1.000 1.022 NA NA 1.000 1.000
d_organ_1 =~ organ_t3 1.000 1.000 1.000 0.467 NA NA 1.000 1.000
d_organ_1 ~1 0.073 -0.074 0.220 0.157 1.633 0.103 -0.015 0.160
organ_t2 ~1 3.266 3.012 3.520 3.207 42.324 0.000 3.115 3.417
d_organ_1 ~~ d_organ_1 0.211 -0.040 0.462 0.974 2.766 0.006 0.061 0.360
organ_t2 ~~ d_organ_1 -0.142 -0.316 0.033 -0.306 -2.676 0.007 -0.245 -0.038
organ_t2 ~ frequ 0.226 -0.122 0.573 0.150 2.138 0.032 0.019 0.432
d_organ_1 ~ frequ 0.111 -0.116 0.338 0.162 1.606 0.108 -0.024 0.246
frequ ~~ frequ 0.461 0.188 0.734 1.000 5.562 0.000 0.299 0.623

The moderation effect of the frequency of self-improvement behaviors with the organization change score from T2 to T3 (current-personality) is not significantly different from zero (at p < .001), b = 0.111, p = 0.108.

6.6.7.15 Productiveness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 6695.442 6780.086 0.953 0.076 0.049
# parameters of interest
params_lcs_produ_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_produ_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_produ_curr_specif_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("produ_t3 ~ produ_t2", "d_produ_1 =~ produ_t3", "produ_t2 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~ sb07_08_t1", "sb07_08_t1 ~~ sb07_08_t1", "d_produ_1 ~ sb07_08_t1", # change goals
                     "d_produ_1 ~1 ", "produ_t2 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
Joining with `by = join_by(term)`
kable(params_lcs_produ_curr_specif_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
produ_t3 ~ produ_t2 1.000 1.000 1.000 1.017 NA NA 1.000 1.000
d_produ_1 =~ produ_t3 1.000 1.000 1.000 0.594 NA NA 1.000 1.000
d_produ_1 ~1 -0.016 -0.163 0.131 -0.030 -0.360 0.719 -0.103 0.071
produ_t2 ~1 2.787 2.567 3.007 3.058 41.702 0.000 2.656 2.918
d_produ_1 ~~ d_produ_1 0.281 -0.039 0.600 0.992 2.894 0.004 0.091 0.471
produ_t2 ~~ d_produ_1 -0.132 -0.344 0.080 -0.328 -2.048 0.041 -0.258 -0.006
d_produ_1 ~ sb07_08_t1 0.047 -0.099 0.194 0.088 1.060 0.289 -0.040 0.135
sb07_08_t1 ~~ sb07_08_t1 0.987 0.754 1.220 1.000 13.934 0.000 0.848 1.126

The moderation effect of the facet-specific change goal with the productiveness change score from T2 to T3 (current-personality) is not significantly different from zero, b = 0.047, p = 0.289.

6.6.7.16 Productiveness - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8216.765 8327.17 0.946 0.071 0.051
# parameters of interest
params_lcs_produ_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_produ_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_produ_curr_frequ_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("produ_t3 ~ produ_t2", "d_produ_1 =~ produ_t3", "produ_t2 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~ frequ", "frequ ~~ frequ", "produ_t2 ~ frequ", # frequency of self improvement
                           "d_produ_1 ~1 ", "produ_t2 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
Joining with `by = join_by(term)`
kable(params_lcs_produ_curr_frequ_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
produ_t3 ~ produ_t2 1.000 1.000 1.000 1.011 NA NA 1.000 1.000
d_produ_1 =~ produ_t3 1.000 1.000 1.000 0.594 NA NA 1.000 1.000
d_produ_1 ~1 -0.015 -0.160 0.131 -0.028 -0.327 0.743 -0.101 0.072
produ_t2 ~1 2.789 2.548 3.030 3.142 38.028 0.000 2.645 2.933
d_produ_1 ~~ d_produ_1 0.268 -0.036 0.573 0.987 2.904 0.004 0.087 0.450
produ_t2 ~~ d_produ_1 -0.134 -0.341 0.073 -0.297 -2.124 0.034 -0.257 -0.010
produ_t2 ~ frequ 0.266 -0.079 0.611 0.204 2.539 0.011 0.061 0.472
d_produ_1 ~ frequ -0.086 -0.336 0.164 -0.112 -1.132 0.257 -0.235 0.063
frequ ~~ frequ 0.461 0.185 0.738 1.000 5.493 0.000 0.297 0.626

The moderation effect of the frequency of self-improvement behaviors with the productiveness change score from T2 to T3 (current-personality) is not significantly different from zero, b = -0.086, p = 0.257.

6.6.7.17 Responsibility - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 6999.059 7083.703 0.92 0.08 0.074
# parameters of interest
params_lcs_respo_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_respo_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_respo_curr_specif_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("respo_t3 ~ respo_t2", "d_respo_1 =~ respo_t3", "respo_t2 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~ sb07_09_t1", "sb07_09_t1 ~~ sb07_09_t1", "d_respo_1 ~ sb07_09_t1", # change goals
                     "d_respo_1 ~1 ", "respo_t2 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
Joining with `by = join_by(term)`
kable(params_lcs_respo_curr_specif_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
respo_t3 ~ respo_t2 1.000 1.000 1.000 1.017 NA NA 1.000 1.000
d_respo_1 =~ respo_t3 1.000 1.000 1.000 0.684 NA NA 1.000 1.000
d_respo_1 ~1 0.004 -0.096 0.104 0.011 0.132 0.895 -0.056 0.064
respo_t2 ~1 3.684 3.500 3.868 7.022 65.848 0.000 3.574 3.794
d_respo_1 ~~ d_respo_1 0.124 -0.039 0.286 0.993 2.507 0.012 0.027 0.220
respo_t2 ~~ d_respo_1 -0.060 -0.144 0.023 -0.360 -2.370 0.018 -0.110 -0.010
d_respo_1 ~ sb07_09_t1 0.030 -0.076 0.135 0.084 0.924 0.356 -0.033 0.092
sb07_09_t1 ~~ sb07_09_t1 1.003 0.852 1.154 1.000 21.798 0.000 0.913 1.093

The moderation effect of the facet-specific change goal with the responsibility change score from T2 to T3 (current-personality) is not significantly different from zero, b = 0.03, p = 0.356.

6.6.7.18 Responsibility - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8478.266 8588.671 0.932 0.067 0.074
# parameters of interest
params_lcs_respo_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_respo_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_respo_curr_frequ_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("respo_t3 ~ respo_t2", "d_respo_1 =~ respo_t3", "respo_t2 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~ frequ", "frequ ~~ frequ", "respo_t2 ~ frequ", # frequency of self improvement
                           "d_respo_1 ~1 ", "respo_t2 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
Joining with `by = join_by(term)`
kable(params_lcs_respo_curr_frequ_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
respo_t3 ~ respo_t2 1.000 1.000 1.000 1.011 NA NA 1.000 1.000
d_respo_1 =~ respo_t3 1.000 1.000 1.000 0.680 NA NA 1.000 1.000
d_respo_1 ~1 0.004 -0.102 0.110 0.010 0.117 0.907 -0.059 0.067
respo_t2 ~1 3.680 3.495 3.866 6.707 65.147 0.000 3.570 3.791
d_respo_1 ~~ d_respo_1 0.136 -0.048 0.320 1.000 2.429 0.015 0.026 0.246
respo_t2 ~~ d_respo_1 -0.071 -0.162 0.020 -0.353 -2.579 0.010 -0.125 -0.017
respo_t2 ~ frequ 0.065 -0.184 0.315 0.081 0.862 0.389 -0.083 0.214
d_respo_1 ~ frequ -0.006 -0.201 0.188 -0.012 -0.106 0.916 -0.122 0.110
frequ ~~ frequ 0.465 0.190 0.740 1.000 5.562 0.000 0.301 0.629

The moderation effect of the frequency of self-improvement behaviors with the responsibility change score from T2 to T3 (current-personality) is not significantly different from zero, b = -0.006, p = 0.916.

6.6.7.19 Anxiety - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 7054.177 7138.821 0.996 0.019 0.037
# parameters of interest
params_lcs_anxie_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_anxie_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_anxie_curr_specif_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("anxie_t3 ~ anxie_t2", "d_anxie_1 =~ anxie_t3", "anxie_t2 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~ sb07_10_t1", "sb07_10_t1 ~~ sb07_10_t1", "d_anxie_1 ~ sb07_10_t1", # change goals
                     "d_anxie_1 ~1 ", "anxie_t2 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
Joining with `by = join_by(term)`
kable(params_lcs_anxie_curr_specif_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
anxie_t3 ~ anxie_t2 1.000 1.000 1.000 1.025 NA NA 1.000 1.000
d_anxie_1 =~ anxie_t3 1.000 1.000 1.000 0.477 NA NA 1.000 1.000
d_anxie_1 ~1 -0.082 -0.220 0.055 -0.213 -1.971 0.049 -0.165 0.000
anxie_t2 ~1 3.014 2.793 3.236 3.623 44.800 0.000 2.882 3.146
d_anxie_1 ~~ d_anxie_1 0.145 -0.017 0.308 0.967 2.939 0.003 0.048 0.242
anxie_t2 ~~ d_anxie_1 -0.121 -0.254 0.012 -0.442 -2.996 0.003 -0.201 -0.042
d_anxie_1 ~ sb07_10_t1 0.070 -0.063 0.203 0.182 1.732 0.083 -0.009 0.149
sb07_10_t1 ~~ sb07_10_t1 1.018 0.837 1.198 1.000 18.545 0.000 0.910 1.125

The moderation effect of the facet-specific change goal with the responsibility change score from T2 to T3 (current-personality) is not significantly different from zero, b = 0.07, p = 0.083.

6.6.7.20 Anxiety - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8574.522 8684.927 0.976 0.041 0.048
# parameters of interest
params_lcs_anxie_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_anxie_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_anxie_curr_frequ_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("anxie_t3 ~ anxie_t2", "d_anxie_1 =~ anxie_t3", "anxie_t2 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~ frequ", "frequ ~~ frequ", "anxie_t2 ~ frequ", # frequency of self improvement
                           "d_anxie_1 ~1 ", "anxie_t2 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
Joining with `by = join_by(term)`
kable(params_lcs_anxie_curr_frequ_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
anxie_t3 ~ anxie_t2 1.000 1.000 1.000 1.033 NA NA 1.000 1.000
d_anxie_1 =~ anxie_t3 1.000 1.000 1.000 0.484 NA NA 1.000 1.000
d_anxie_1 ~1 -0.085 -0.225 0.054 -0.217 -2.012 0.044 -0.168 -0.002
anxie_t2 ~1 2.999 2.766 3.232 3.581 42.362 0.000 2.861 3.138
d_anxie_1 ~~ d_anxie_1 0.153 -0.015 0.321 0.994 2.999 0.003 0.053 0.253
anxie_t2 ~~ d_anxie_1 -0.098 -0.235 0.038 -0.300 -2.376 0.018 -0.180 -0.017
anxie_t2 ~ frequ -0.019 -0.361 0.323 -0.016 -0.183 0.855 -0.223 0.185
d_anxie_1 ~ frequ 0.044 -0.207 0.295 0.077 0.582 0.561 -0.105 0.194
frequ ~~ frequ 0.469 0.193 0.746 1.000 5.580 0.000 0.305 0.634

The moderation effect of the frequency of self-improvement behaviors with the anxiety change score from T2 to T3 (current-personality) is not significantly different from zero, b = 0.044, p = 0.561.

6.6.7.21 Depression - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 6819.454 6904.098 0.97 0.065 0.054
# parameters of interest
params_lcs_depre_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_depre_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_depre_curr_specif_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("depre_t3 ~ depre_t2", "d_depre_1 =~ depre_t3", "depre_t2 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~ sb07_11_t1", "sb07_11_t1 ~~ sb07_11_t1", "d_depre_1 ~ sb07_11_t1", # change goals
                     "d_depre_1 ~1 ", "depre_t2 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
Joining with `by = join_by(term)`
kable(params_lcs_depre_curr_specif_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
depre_t3 ~ depre_t2 1.000 1.000 1.000 0.993 NA NA 1.000 1.000
d_depre_1 =~ depre_t3 1.000 1.000 1.000 0.565 NA NA 1.000 1.000
d_depre_1 ~1 -0.038 -0.131 0.055 -0.115 -1.358 0.175 -0.094 0.017
depre_t2 ~1 2.732 2.536 2.928 4.667 45.873 0.000 2.616 2.849
d_depre_1 ~~ d_depre_1 0.109 0.019 0.198 0.979 3.980 0.000 0.055 0.162
depre_t2 ~~ d_depre_1 -0.034 -0.082 0.013 -0.239 -2.376 0.018 -0.063 -0.006
d_depre_1 ~ sb07_11_t1 -0.048 -0.138 0.042 -0.144 -1.762 0.078 -0.101 0.005
sb07_11_t1 ~~ sb07_11_t1 1.001 0.874 1.128 1.000 25.943 0.000 0.925 1.077

The moderation effect of the facet-specific change goal with the depression change score from T2 to T3 (current-personality) is not significantly different from zero, b = -0.048, p = 0.078.

6.6.7.22 Depression - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8403.304 8513.709 0.936 0.08 0.086
# parameters of interest
params_lcs_depre_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_depre_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_depre_curr_frequ_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("depre_t3 ~ depre_t2", "d_depre_1 =~ depre_t3", "depre_t2 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~ frequ", "frequ ~~ frequ", "depre_t2 ~ frequ", # frequency of self improvement
                           "d_depre_1 ~1 ", "depre_t2 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
Joining with `by = join_by(term)`
kable(params_lcs_depre_curr_frequ_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
depre_t3 ~ depre_t2 1.000 1.000 1.000 0.993 NA NA 1.000 1.000
d_depre_1 =~ depre_t3 1.000 1.000 1.000 0.561 NA NA 1.000 1.000
d_depre_1 ~1 -0.038 -0.133 0.057 -0.113 -1.318 0.188 -0.095 0.019
depre_t2 ~1 2.721 2.515 2.928 4.555 43.326 0.000 2.598 2.844
d_depre_1 ~~ d_depre_1 0.114 0.019 0.208 1.000 3.970 0.000 0.058 0.170
depre_t2 ~~ d_depre_1 -0.054 -0.110 0.001 -0.270 -3.213 0.001 -0.088 -0.021
depre_t2 ~ frequ -0.005 -0.237 0.226 -0.006 -0.077 0.939 -0.143 0.132
d_depre_1 ~ frequ -0.001 -0.152 0.150 -0.002 -0.022 0.982 -0.091 0.089
frequ ~~ frequ 0.468 0.189 0.747 1.000 5.518 0.000 0.302 0.634

The moderation effect of the frequency of self-improvement behaviors with the depression change score from T2 to T3 (current-personality) is not significantly different from zero, b = -0.001, p = 0.982.

6.6.7.23 Volatility - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 7003.662 7088.306 0.989 0.034 0.033
# parameters of interest
params_lcs_volat_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_volat_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_volat_curr_specif_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("volat_t3 ~ volat_t2", "d_volat_1 =~ volat_t3", "volat_t2 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~ sb07_12_t1", "sb07_12_t1 ~~ sb07_12_t1", "d_volat_1 ~ sb07_12_t1", # change goals
                     "d_volat_1 ~1 ", "volat_t2 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
Joining with `by = join_by(term)`
kable(params_lcs_volat_curr_specif_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
volat_t3 ~ volat_t2 1.000 1.000 1.000 0.998 NA NA 1.000 1.000
d_volat_1 =~ volat_t3 1.000 1.000 1.000 0.419 NA NA 1.000 1.000
d_volat_1 ~1 0.006 -0.134 0.146 0.016 0.146 0.884 -0.077 0.090
volat_t2 ~1 2.949 2.728 3.171 3.239 43.762 0.000 2.817 3.081
d_volat_1 ~~ d_volat_1 0.140 -0.042 0.322 0.960 2.533 0.011 0.032 0.248
volat_t2 ~~ d_volat_1 -0.046 -0.180 0.089 -0.144 -1.119 0.263 -0.126 0.034
d_volat_1 ~ sb07_12_t1 -0.076 -0.224 0.072 -0.199 -1.692 0.091 -0.164 0.012
sb07_12_t1 ~~ sb07_12_t1 0.999 0.835 1.164 1.000 19.963 0.000 0.901 1.097

The moderation effect of the facet-specific change goal with the volatility change score from T2 to T3 (current-personality) is not significantly different from zero, b = -0.076, p = 0.091.

6.6.7.24 Volatility - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8475.656 8586.061 1 0 0.031
# parameters of interest
params_lcs_volat_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_volat_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_volat_curr_frequ_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("volat_t3 ~ volat_t2", "d_volat_1 =~ volat_t3", "volat_t2 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~ frequ", "frequ ~~ frequ", "volat_t2 ~ frequ", # frequency of self improvement
                           "d_volat_1 ~1 ", "volat_t2 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
Joining with `by = join_by(term)`
kable(params_lcs_volat_curr_frequ_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
volat_t3 ~ volat_t2 1.000 1.000 1.000 0.998 NA NA 1.000 1.000
d_volat_1 =~ volat_t3 1.000 1.000 1.000 0.418 NA NA 1.000 1.000
d_volat_1 ~1 0.006 -0.135 0.146 0.015 0.132 0.895 -0.078 0.089
volat_t2 ~1 2.951 2.719 3.183 3.270 41.853 0.000 2.813 3.089
d_volat_1 ~~ d_volat_1 0.141 -0.039 0.322 0.992 2.574 0.010 0.034 0.249
volat_t2 ~~ d_volat_1 -0.070 -0.204 0.063 -0.207 -1.730 0.084 -0.150 0.009
volat_t2 ~ frequ -0.016 -0.340 0.307 -0.012 -0.164 0.870 -0.209 0.177
d_volat_1 ~ frequ -0.048 -0.281 0.184 -0.088 -0.686 0.493 -0.187 0.090
frequ ~~ frequ 0.467 0.195 0.739 1.000 5.643 0.000 0.305 0.629

The moderation effect of the frequency of self-improvement behaviors with the volatility change score from T2 to T3 (current-personality) is not significantly different from zero, b = -0.048, p = 0.493.

6.6.7.25 Curiosity - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 6773.63 6858.274 0.994 0.021 0.037
# parameters of interest
params_lcs_curio_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_curio_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_curio_curr_specif_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("curio_t3 ~ curio_t2", "d_curio_1 =~ curio_t3", "curio_t2 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~ sb07_13_t1", "sb07_13_t1 ~~ sb07_13_t1", "d_curio_1 ~ sb07_13_t1", # change goals
                     "d_curio_1 ~1 ", "curio_t2 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
Joining with `by = join_by(term)`
kable(params_lcs_curio_curr_specif_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
curio_t3 ~ curio_t2 1.000 1.000 1.000 1.105 NA NA 1.000 1.000
d_curio_1 =~ curio_t3 1.000 1.000 1.000 0.421 NA NA 1.000 1.000
d_curio_1 ~1 -0.010 -0.090 0.069 -0.057 -0.416 0.677 -0.057 0.037
curio_t2 ~1 4.189 4.036 4.341 9.125 90.402 0.000 4.098 4.280
d_curio_1 ~~ d_curio_1 0.031 -0.028 0.090 1.000 1.707 0.088 -0.005 0.066
curio_t2 ~~ d_curio_1 -0.035 -0.090 0.020 -0.446 -2.087 0.037 -0.067 -0.002
d_curio_1 ~ sb07_13_t1 -0.003 -0.090 0.084 -0.015 -0.102 0.919 -0.054 0.049
sb07_13_t1 ~~ sb07_13_t1 0.997 0.795 1.198 1.000 16.250 0.000 0.876 1.117

The moderation effect of the facet-specific change goal with the curiosity change score from T2 to T3 (current-personality) is not significantly different from zero, b = -0.003, p = 0.919.

6.6.7.26 Curiosity - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8217.569 8327.974 0.976 0.039 0.053
# parameters of interest
params_lcs_curio_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_curio_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_curio_curr_frequ_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("curio_t3 ~ curio_t2", "d_curio_1 =~ curio_t3", "curio_t2 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~ frequ", "frequ ~~ frequ", "curio_t2 ~ frequ", # frequency of self improvement
                           "d_curio_1 ~1 ", "curio_t2 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
Joining with `by = join_by(term)`
kable(params_lcs_curio_curr_frequ_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
curio_t3 ~ curio_t2 1.000 1.000 1.000 1.103 NA NA 1.000 1.000
d_curio_1 =~ curio_t3 1.000 1.000 1.000 0.418 NA NA 1.000 1.000
d_curio_1 ~1 -0.010 -0.087 0.068 -0.056 -0.405 0.685 -0.056 0.037
curio_t2 ~1 4.189 4.033 4.344 9.342 88.360 0.000 4.096 4.281
d_curio_1 ~~ d_curio_1 0.028 -0.027 0.083 0.979 1.697 0.090 -0.004 0.061
curio_t2 ~~ d_curio_1 -0.030 -0.081 0.022 -0.405 -1.885 0.059 -0.060 0.001
curio_t2 ~ frequ 0.166 -0.044 0.376 0.252 2.600 0.009 0.041 0.291
d_curio_1 ~ frequ -0.036 -0.169 0.097 -0.146 -0.900 0.368 -0.116 0.043
frequ ~~ frequ 0.466 0.187 0.744 1.000 5.499 0.000 0.300 0.631

The moderation effect of the frequency of self-improvement behaviors with the curiosity change score from T2 to T3 (current-personality) is not significantly different from zero, b = -0.036, p = 0.368.

6.6.7.27 Aesthetic - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 6953.911 7038.555 0.984 0.041 0.044
# parameters of interest
params_lcs_aesth_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_aesth_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_aesth_curr_specif_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("aesth_t3 ~ aesth_t2", "d_aesth_1 =~ aesth_t3", "aesth_t2 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~ sb07_14_t1", "sb07_14_t1 ~~ sb07_14_t1", "d_aesth_1 ~ sb07_14_t1", # change goals
                     "d_aesth_1 ~1 ", "aesth_t2 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
Joining with `by = join_by(term)`
kable(params_lcs_aesth_curr_specif_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
aesth_t3 ~ aesth_t2 1.000 1.000 1.000 1.048 NA NA 1.000 1.000
d_aesth_1 =~ aesth_t3 1.000 1.000 1.000 0.441 NA NA 1.000 1.000
d_aesth_1 ~1 0.012 -0.020 0.044 0.131 1.245 0.213 -0.007 0.031
aesth_t2 ~1 3.142 2.915 3.369 14.384 45.564 0.000 3.007 3.277
d_aesth_1 ~~ d_aesth_1 0.008 -0.014 0.031 0.983 1.210 0.226 -0.005 0.022
aesth_t2 ~~ d_aesth_1 -0.006 -0.023 0.010 -0.319 -1.254 0.210 -0.016 0.004
d_aesth_1 ~ sb07_14_t1 0.012 -0.021 0.045 0.130 1.210 0.226 -0.008 0.032
sb07_14_t1 ~~ sb07_14_t1 0.972 0.810 1.134 1.000 19.738 0.000 0.875 1.068

The moderation effect of the facet-specific change goal with the aesthetic change score from T2 to T3 (current-personality) is not significantly different from zero, b = 0.012, p = 0.226.

6.6.7.28 Aesthetic - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 8395.372 8505.777 0.971 0.051 0.05
# parameters of interest
params_lcs_aesth_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_aesth_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_aesth_curr_frequ_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("aesth_t3 ~ aesth_t2", "d_aesth_1 =~ aesth_t3", "aesth_t2 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~ frequ", "frequ ~~ frequ", "aesth_t2 ~ frequ", # frequency of self improvement
                           "d_aesth_1 ~1 ", "aesth_t2 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
Joining with `by = join_by(term)`
kable(params_lcs_aesth_curr_frequ_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
aesth_t3 ~ aesth_t2 1.000 1.000 1.000 1.047 NA NA 1.000 1.000
d_aesth_1 =~ aesth_t3 1.000 1.000 1.000 0.440 NA NA 1.000 1.000
d_aesth_1 ~1 0.012 -0.020 0.044 0.133 1.254 0.210 -0.007 0.031
aesth_t2 ~1 3.142 2.915 3.369 14.342 45.583 0.000 3.007 3.277
d_aesth_1 ~~ d_aesth_1 0.008 -0.014 0.031 0.997 1.216 0.224 -0.005 0.022
aesth_t2 ~~ d_aesth_1 -0.006 -0.022 0.010 -0.310 -1.247 0.212 -0.016 0.004
aesth_t2 ~ frequ 0.061 -0.063 0.186 0.191 1.616 0.106 -0.013 0.135
d_aesth_1 ~ frequ -0.007 -0.059 0.045 -0.055 -0.466 0.641 -0.038 0.024
frequ ~~ frequ 0.467 0.191 0.742 1.000 5.579 0.000 0.303 0.631

The moderation effect of the frequency of self-improvement behaviors with the aesthetic change score from T2 to T3 (current-personality) is not significantly different from zero, b = -0.007, p = 0.641.

6.6.7.29 Imagination - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_specif_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 23 6485.489 6570.133 0.95 0.069 0.063
# parameters of interest
params_lcs_imagi_curr_specif_hyp6_fu <- broom::tidy(fit_mi_lcs_imagi_curr_specif_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_imagi_curr_specif_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("imagi_t3 ~ imagi_t2", "d_imagi_1 =~ imagi_t3", "imagi_t2 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~ sb07_15_t1", "sb07_15_t1 ~~ sb07_15_t1", "d_imagi_1 ~ sb07_15_t1", # change goals
                     "d_imagi_1 ~1 ", "imagi_t2 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
Joining with `by = join_by(term)`
kable(params_lcs_imagi_curr_specif_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
imagi_t3 ~ imagi_t2 1.000 1.000 1.000 1.147 NA NA 1.000 1.000
d_imagi_1 =~ imagi_t3 1.000 1.000 1.000 0.577 NA NA 1.000 1.000
d_imagi_1 ~1 0.053 -0.062 0.168 0.146 1.516 0.129 -0.015 0.121
imagi_t2 ~1 3.746 3.578 3.914 5.202 73.367 0.000 3.646 3.846
d_imagi_1 ~~ d_imagi_1 0.129 -0.030 0.287 0.979 2.664 0.008 0.034 0.223
imagi_t2 ~~ d_imagi_1 -0.116 -0.250 0.018 -0.473 -2.850 0.004 -0.196 -0.036
d_imagi_1 ~ sb07_15_t1 0.053 -0.063 0.168 0.144 1.502 0.133 -0.016 0.121
sb07_15_t1 ~~ sb07_15_t1 0.992 0.830 1.154 1.000 20.155 0.000 0.896 1.088

The moderation effect of the facet-specific change goal with the imagination change score from T2 to T3 (current-personality) is not significantly different from zero, b = 0.053, p = 0.133.

6.6.7.30 Imagination - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_frequ_hyp6_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
293 30 7930.274 8040.679 0.959 0.057 0.059
# parameters of interest
params_lcs_imagi_curr_frequ_hyp6_fu <- broom::tidy(fit_mi_lcs_imagi_curr_frequ_hyp6_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_imagi_curr_frequ_hyp6_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("imagi_t3 ~ imagi_t2", "d_imagi_1 =~ imagi_t3", "imagi_t2 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~ frequ", "frequ ~~ frequ", "imagi_t2 ~ frequ", # frequency of self improvement
                           "d_imagi_1 ~1 ", "imagi_t2 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
Joining with `by = join_by(term)`
kable(params_lcs_imagi_curr_frequ_hyp6_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
imagi_t3 ~ imagi_t2 1.000 1.000 1.000 1.146 NA NA 1.000 1.000
d_imagi_1 =~ imagi_t3 1.000 1.000 1.000 0.578 NA NA 1.000 1.000
d_imagi_1 ~1 0.056 -0.061 0.174 0.154 1.576 0.115 -0.014 0.126
imagi_t2 ~1 3.737 3.566 3.909 5.146 71.916 0.000 3.636 3.839
d_imagi_1 ~~ d_imagi_1 0.133 -0.030 0.297 0.993 2.686 0.007 0.036 0.231
imagi_t2 ~~ d_imagi_1 -0.123 -0.263 0.017 -0.489 -2.898 0.004 -0.207 -0.040
imagi_t2 ~ frequ 0.333 0.035 0.632 0.311 3.673 0.000 0.155 0.511
d_imagi_1 ~ frequ -0.044 -0.237 0.148 -0.082 -0.755 0.450 -0.159 0.071
frequ ~~ frequ 0.461 0.196 0.725 1.000 5.731 0.000 0.303 0.618

The moderation effect of the frequency of self-improvement behaviors with the imagination change score from T2 to T3 (current-personality) is not significantly different from zero, b = -0.044, p = 0.45.

6.6.8 Big Five facets (ideal personality)

6.6.8.1 Sociability - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7777.66 7865.591 0.96 0.042 0.046
# parameters of interest
params_lcs_socia_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_socia_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_socia_ideal_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~ sb07_01_t1", "sb07_01_t1 ~~ sb07_01_t1", "d_socia_1 ~ sb07_01_t1", # change goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
Joining with `by = join_by(term)`
kable(params_lcs_socia_ideal_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
socia_t2 ~ socia_t1 1.000 1.000 1.000 0.980 NA NA 1.000 1.000
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.624 NA NA 1.000 1.000
d_socia_1 ~1 -0.030 -0.125 0.064 -0.113 -1.066 0.286 -0.086 0.026
socia_t1 ~1 4.241 4.103 4.379 9.996 101.262 0.000 4.159 4.323
d_socia_1 ~~ d_socia_1 0.069 -0.029 0.167 0.945 2.323 0.020 0.011 0.127
socia_t1 ~~ d_socia_1 -0.028 -0.084 0.028 -0.255 -1.649 0.099 -0.061 0.005
d_socia_1 ~ sb07_01_t1 -0.064 -0.167 0.040 -0.235 -2.023 0.043 -0.125 -0.002
sb07_01_t1 ~~ sb07_01_t1 0.997 0.791 1.203 1.000 15.898 0.000 0.874 1.120

The moderation effect of the facet-specific change goal with the sociability change score (ideal-personality) is not significantly different from zero, b = -0.064, p = 0.043.

6.6.8.2 Sociability - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9095.952 9210.643 0.953 0.046 0.056
# parameters of interest
params_lcs_socia_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_socia_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_socia_ideal_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~ frequ", "frequ ~~ frequ", "socia_t1 ~ frequ", # frequency of self improvement
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
Joining with `by = join_by(term)`
kable(params_lcs_socia_ideal_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
socia_t2 ~ socia_t1 1.000 1.000 1.000 0.982 NA NA 1.000 1.000
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.626 NA NA 1.000 1.000
d_socia_1 ~1 -0.032 -0.128 0.065 -0.115 -1.087 0.277 -0.089 0.026
socia_t1 ~1 4.241 4.101 4.380 9.796 100.182 0.000 4.158 4.324
d_socia_1 ~~ d_socia_1 0.075 -0.030 0.179 0.980 2.343 0.019 0.012 0.137
socia_t1 ~~ d_socia_1 -0.036 -0.100 0.028 -0.307 -1.867 0.062 -0.074 0.002
socia_t1 ~ frequ 0.057 -0.138 0.253 0.091 0.964 0.335 -0.059 0.174
d_socia_1 ~ frequ 0.056 -0.121 0.234 0.140 1.042 0.297 -0.049 0.162
frequ ~~ frequ 0.472 0.198 0.746 1.000 5.660 0.000 0.309 0.635

The moderation effect of the frequency of self-improvement behaviors with sociability change score (ideal-personality) is not significantly different from zero, b = 0.056, p = 0.297.

6.6.8.3 Assertiveness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7868.102 7956.032 0.946 0.048 0.047
# parameters of interest
params_lcs_asser_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_asser_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_asser_ideal_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~ sb07_02_t1", "sb07_02_t1 ~~ sb07_02_t1", "d_asser_1 ~ sb07_02_t1", # change goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
Joining with `by = join_by(term)`
kable(params_lcs_asser_ideal_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.974 NA NA 1.000 1.000
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.629 NA NA 1.000 1.000
d_asser_1 ~1 -0.005 -0.071 0.061 -0.025 -0.242 0.808 -0.044 0.035
asser_t1 ~1 4.145 4.010 4.281 13.460 100.494 0.000 4.065 4.226
d_asser_1 ~~ d_asser_1 0.040 -0.042 0.121 1.000 1.595 0.111 -0.009 0.088
asser_t1 ~~ d_asser_1 -0.017 -0.059 0.025 -0.281 -1.346 0.178 -0.042 0.008
d_asser_1 ~ sb07_02_t1 0.003 -0.068 0.074 0.016 0.148 0.882 -0.039 0.045
sb07_02_t1 ~~ sb07_02_t1 0.997 0.806 1.188 1.000 17.182 0.000 0.883 1.111

The moderation effect of the facet-specific change goal with the assertiveness change score (ideal-personality) is not significantly different from zero, b = 0.003, p = 0.882.

6.6.8.4 Assertiveness - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9154.226 9268.917 0.972 0.035 0.043
# parameters of interest
params_lcs_asser_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_asser_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_asser_ideal_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~ frequ", "frequ ~~ frequ", "asser_t1 ~ frequ", # frequency of self improvement
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
Joining with `by = join_by(term)`
kable(params_lcs_asser_ideal_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.978 NA NA 1.000 1.000
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.653 NA NA 1.000 1.000
d_asser_1 ~1 -0.004 -0.069 0.061 -0.020 -0.205 0.837 -0.043 0.035
asser_t1 ~1 4.145 4.009 4.281 13.499 100.349 0.000 4.064 4.226
d_asser_1 ~~ d_asser_1 0.042 -0.038 0.122 0.997 1.720 0.086 -0.006 0.090
asser_t1 ~~ d_asser_1 -0.020 -0.062 0.021 -0.345 -1.593 0.111 -0.045 0.005
asser_t1 ~ frequ 0.165 0.007 0.322 0.372 3.447 0.001 0.071 0.259
d_asser_1 ~ frequ 0.016 -0.091 0.123 0.054 0.493 0.622 -0.047 0.079
frequ ~~ frequ 0.479 0.209 0.749 1.000 5.845 0.000 0.318 0.640

The moderation effect of the frequency of self-improvement behaviors with the assertiveness change score (ideal-personality) is not significantly different from zero, b = 0.016, p = 0.622.

6.6.8.5 Energy - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7739.844 7827.774 0.949 0.039 0.046
# parameters of interest
params_lcs_energ_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_energ_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_energ_ideal_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~ sb07_03_t1", "sb07_03_t1 ~~ sb07_03_t1", "d_energ_1 ~ sb07_03_t1", # change goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
Joining with `by = join_by(term)`
kable(params_lcs_energ_ideal_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
energ_t2 ~ energ_t1 1.000 1.000 1.000 0.802 NA NA 1.000 1.000
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.569 NA NA 1.000 1.000
d_energ_1 ~1 -0.038 -0.100 0.024 -0.317 -2.015 0.044 -0.075 -0.001
energ_t1 ~1 3.757 3.559 3.955 22.220 62.456 0.000 3.639 3.875
d_energ_1 ~~ d_energ_1 0.014 -0.022 0.050 0.991 1.312 0.189 -0.007 0.036
energ_t1 ~~ d_energ_1 0.001 -0.014 0.016 0.050 0.215 0.830 -0.008 0.010
d_energ_1 ~ sb07_03_t1 -0.012 -0.057 0.034 -0.096 -0.830 0.406 -0.039 0.016
sb07_03_t1 ~~ sb07_03_t1 0.997 0.786 1.208 1.000 15.549 0.000 0.871 1.123

The moderation effect of the facet-specific change goal with the energy change score (ideal-personality) is not significantly different from zero, b = -0.012, p = 0.406.

6.6.8.6 Energy - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9039.352 9154.044 0.967 0.034 0.046
# parameters of interest
params_lcs_energ_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_energ_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_energ_ideal_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~ frequ", "frequ ~~ frequ", "energ_t1 ~ frequ", # frequency of self improvement
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
Joining with `by = join_by(term)`
kable(params_lcs_energ_ideal_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
energ_t2 ~ energ_t1 1.000 1.000 1.000 0.813 NA NA 1.000 1.000
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.551 NA NA 1.000 1.000
d_energ_1 ~1 -0.040 -0.101 0.022 -0.330 -2.115 0.034 -0.076 -0.003
energ_t1 ~1 3.758 3.560 3.956 21.232 62.521 0.000 3.640 3.876
d_energ_1 ~~ d_energ_1 0.014 -0.020 0.048 0.991 1.374 0.169 -0.006 0.035
energ_t1 ~~ d_energ_1 0.000 -0.016 0.017 0.009 0.037 0.971 -0.010 0.010
energ_t1 ~ frequ 0.084 -0.040 0.208 0.328 2.229 0.026 0.010 0.157
d_energ_1 ~ frequ 0.016 -0.073 0.106 0.095 0.604 0.546 -0.037 0.070
frequ ~~ frequ 0.481 0.206 0.755 1.000 5.756 0.000 0.317 0.644

The moderation effect of the frequency of self-improvement behaviors with the energy change score (ideal-personality) is not significantly different from zero, b = 0.016, p = 0.546.

6.6.8.7 Compassion - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8182.787 8270.717 0.938 0.048 0.057
# parameters of interest
params_lcs_compa_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_compa_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_compa_ideal_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~ sb07_04_t1", "sb07_04_t1 ~~ sb07_04_t1", "d_compa_1 ~ sb07_04_t1", # change goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
Joining with `by = join_by(term)`
kable(params_lcs_compa_ideal_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
compa_t2 ~ compa_t1 1.000 1.000 1.000 0.980 NA NA 1.000 1.000
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.429 NA NA 1.000 1.000
d_compa_1 ~1 -0.041 -0.158 0.077 -0.185 -1.144 0.253 -0.111 0.029
compa_t1 ~1 4.225 4.068 4.383 8.384 88.346 0.000 4.131 4.319
d_compa_1 ~~ d_compa_1 0.045 -0.086 0.177 0.933 1.135 0.257 -0.033 0.124
compa_t1 ~~ d_compa_1 -0.013 -0.111 0.085 -0.122 -0.428 0.669 -0.071 0.046
d_compa_1 ~ sb07_04_t1 0.057 -0.060 0.175 0.259 1.601 0.109 -0.013 0.127
sb07_04_t1 ~~ sb07_04_t1 0.997 0.833 1.161 1.000 19.987 0.000 0.899 1.095

The moderation effect of the facet-specific change goal with the compassion change score (ideal-personality) is not significantly different from zero, b = 0.057, p = 0.109.

6.6.8.8 Compassion - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9496.862 9611.554 0.941 0.048 0.066
# parameters of interest
params_lcs_compa_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_compa_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_compa_ideal_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~ frequ", "frequ ~~ frequ", "compa_t1 ~ frequ", # frequency of self improvement
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
Joining with `by = join_by(term)`
kable(params_lcs_compa_ideal_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
compa_t2 ~ compa_t1 1.000 1.000 1.000 0.979 NA NA 1.000 1.000
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.433 NA NA 1.000 1.000
d_compa_1 ~1 -0.042 -0.162 0.078 -0.185 -1.148 0.251 -0.114 0.030
compa_t1 ~1 4.226 4.069 4.383 8.210 88.386 0.000 4.132 4.320
d_compa_1 ~~ d_compa_1 0.052 -0.087 0.190 0.999 1.230 0.219 -0.031 0.134
compa_t1 ~~ d_compa_1 -0.021 -0.124 0.082 -0.186 -0.676 0.499 -0.082 0.040
compa_t1 ~ frequ 0.178 -0.016 0.372 0.240 3.021 0.003 0.063 0.294
d_compa_1 ~ frequ 0.011 -0.195 0.218 0.035 0.183 0.855 -0.111 0.134
frequ ~~ frequ 0.480 0.201 0.758 1.000 5.672 0.000 0.314 0.645

The moderation effect of the frequency of self-improvement behaviors with the compassion change score (ideal-personality) is not significantly different from zero, b = 0.011, p = 0.855.

6.6.8.9 Respectfulness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 6599.073 6687.003 0.966 0.041 0.046
# parameters of interest
params_lcs_respe_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_respe_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_respe_ideal_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~ sb07_05_t1", "sb07_05_t1 ~~ sb07_05_t1", "d_respe_1 ~ sb07_05_t1", # change goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
Joining with `by = join_by(term)`
kable(params_lcs_respe_ideal_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.108 NA NA 1.000 1.000
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.678 NA NA 1.000 1.000
d_respe_1 ~1 0.001 -0.083 0.084 0.002 0.020 0.984 -0.049 0.050
respe_t1 ~1 4.710 4.610 4.810 11.954 154.464 0.000 4.650 4.770
d_respe_1 ~~ d_respe_1 0.058 -0.007 0.123 0.997 2.940 0.003 0.019 0.097
respe_t1 ~~ d_respe_1 -0.044 -0.102 0.013 -0.470 -2.522 0.012 -0.078 -0.010
d_respe_1 ~ sb07_05_t1 -0.013 -0.102 0.077 -0.053 -0.470 0.638 -0.066 0.040
sb07_05_t1 ~~ sb07_05_t1 0.997 0.796 1.198 1.000 16.296 0.000 0.877 1.117

The moderation effect of the facet-specific change goal with the respectfulness change score (ideal-personality) is not significantly different from zero, b = -0.013, p = 0.638.

6.6.8.10 Respectfulness - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 7902.234 8016.925 0.969 0.039 0.05
# parameters of interest
params_lcs_respe_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_respe_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_respe_ideal_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~ frequ", "frequ ~~ frequ", "respe_t1 ~ frequ", # frequency of self improvement
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
Joining with `by = join_by(term)`
kable(params_lcs_respe_ideal_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.108 NA NA 1.000 1.000
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.678 NA NA 1.000 1.000
d_respe_1 ~1 -0.001 -0.085 0.083 -0.004 -0.042 0.967 -0.051 0.049
respe_t1 ~1 4.710 4.609 4.811 11.948 153.622 0.000 4.650 4.770
d_respe_1 ~~ d_respe_1 0.057 -0.008 0.122 0.983 2.894 0.004 0.018 0.096
respe_t1 ~~ d_respe_1 -0.040 -0.095 0.016 -0.442 -2.337 0.019 -0.073 -0.006
respe_t1 ~ frequ 0.180 0.044 0.317 0.321 4.351 0.000 0.099 0.262
d_respe_1 ~ frequ -0.045 -0.162 0.072 -0.131 -1.263 0.207 -0.115 0.025
frequ ~~ frequ 0.490 0.211 0.770 1.000 5.782 0.000 0.324 0.657

The moderation effect of the frequency of self-improvement behaviors with the respectfulness change score (ideal-personality) is not significantly different from zero, b = -0.045, p = 0.207.

6.6.8.11 Trust - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8006.571 8094.501 0.957 0.045 0.047
# parameters of interest
params_lcs_trust_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_trust_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_trust_ideal_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~ sb07_06_t1", "sb07_06_t1 ~~ sb07_06_t1", "d_trust_1 ~ sb07_06_t1", # change goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
Joining with `by = join_by(term)`
kable(params_lcs_trust_ideal_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
trust_t2 ~ trust_t1 1.000 1.000 1.000 0.896 NA NA 1.000 1.000
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.335 NA NA 1.000 1.000
d_trust_1 ~1 -0.062 -0.137 0.012 -0.479 -2.745 0.006 -0.107 -0.018
trust_t1 ~1 4.100 3.944 4.255 11.773 86.712 0.000 4.007 4.192
d_trust_1 ~~ d_trust_1 0.016 -0.041 0.074 0.972 0.939 0.348 -0.018 0.051
trust_t1 ~~ d_trust_1 0.006 -0.030 0.043 0.140 0.562 0.574 -0.016 0.028
d_trust_1 ~ sb07_06_t1 0.022 -0.058 0.101 0.167 0.896 0.370 -0.026 0.069
sb07_06_t1 ~~ sb07_06_t1 0.997 0.840 1.154 1.000 20.861 0.000 0.903 1.091

The moderation effect of the facet-specific change goal with the trust change score (ideal-personality) is not significantly different from zero, b = 0.022, p = 0.37.

6.6.8.12 Trust - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9311.385 9426.076 0.974 0.035 0.046
# parameters of interest
params_lcs_trust_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_trust_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_trust_ideal_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~ frequ", "frequ ~~ frequ", "trust_t1 ~ frequ", # frequency of self improvement
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
Joining with `by = join_by(term)`
kable(params_lcs_trust_ideal_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
trust_t2 ~ trust_t1 1.000 1.000 1.000 0.898 NA NA 1.000 1.000
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.333 NA NA 1.000 1.000
d_trust_1 ~1 -0.062 -0.137 0.014 -0.482 -2.701 0.007 -0.107 -0.017
trust_t1 ~1 4.100 3.944 4.255 11.845 86.645 0.000 4.007 4.192
d_trust_1 ~~ d_trust_1 0.016 -0.041 0.073 0.973 0.929 0.353 -0.018 0.050
trust_t1 ~~ d_trust_1 0.008 -0.028 0.044 0.191 0.733 0.463 -0.013 0.030
trust_t1 ~ frequ 0.139 -0.013 0.291 0.275 3.015 0.003 0.049 0.229
d_trust_1 ~ frequ -0.031 -0.166 0.105 -0.163 -0.741 0.459 -0.111 0.050
frequ ~~ frequ 0.469 0.198 0.740 1.000 5.701 0.000 0.308 0.630

The moderation effect of the self-improvement behaviors with the trust change score (ideal-personality) is not significantly different from zero, b = -0.031, p = 0.459.

6.6.8.13 Organization - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7050.481 7138.411 0.762 0.086 0.092
# parameters of interest
params_lcs_organ_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_organ_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_organ_ideal_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~ sb07_07_t1", "sb07_07_t1 ~~ sb07_07_t1", "d_organ_1 ~ sb07_07_t1", # change goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
Joining with `by = join_by(term)`
kable(params_lcs_organ_ideal_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
organ_t2 ~ organ_t1 1.000 1.000 1.000 0.978 NA NA 1.000 1.000
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.720 NA NA 1.000 1.000
d_organ_1 ~1 0.019 -0.088 0.125 0.066 0.577 0.564 -0.045 0.082
organ_t1 ~1 4.322 4.149 4.495 11.310 82.164 0.000 4.219 4.425
d_organ_1 ~~ d_organ_1 0.078 -0.032 0.187 0.980 2.328 0.020 0.012 0.143
organ_t1 ~~ d_organ_1 -0.036 -0.117 0.046 -0.335 -1.434 0.151 -0.084 0.013
d_organ_1 ~ sb07_07_t1 -0.040 -0.152 0.071 -0.143 -1.191 0.234 -0.107 0.026
sb07_07_t1 ~~ sb07_07_t1 0.997 0.850 1.144 1.000 22.374 0.000 0.910 1.084

The moderation effect of the facet-specific change goal with the organization change score (ideal-personality) is not significantly different from zero, b = -0.04, p = 0.234.

6.6.8.14 Organization - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 8346.228 8460.919 0.871 0.068 0.081
# parameters of interest
params_lcs_organ_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_organ_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_organ_ideal_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~ frequ", "frequ ~~ frequ", "organ_t1 ~ frequ", # frequency of self improvement
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
Joining with `by = join_by(term)`
kable(params_lcs_organ_ideal_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
organ_t2 ~ organ_t1 1.000 1.000 1.000 0.985 NA NA 1.000 1.000
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.712 NA NA 1.000 1.000
d_organ_1 ~1 0.021 -0.082 0.125 0.077 0.675 0.500 -0.040 0.083
organ_t1 ~1 4.321 4.148 4.494 11.333 82.158 0.000 4.218 4.424
d_organ_1 ~~ d_organ_1 0.074 -0.026 0.174 0.975 2.447 0.014 0.015 0.133
organ_t1 ~~ d_organ_1 -0.040 -0.119 0.039 -0.401 -1.674 0.094 -0.087 0.007
organ_t1 ~ frequ 0.143 -0.014 0.300 0.264 2.993 0.003 0.049 0.237
d_organ_1 ~ frequ 0.062 -0.091 0.215 0.158 1.333 0.182 -0.029 0.153
frequ ~~ frequ 0.495 0.216 0.773 1.000 5.841 0.000 0.329 0.660

The moderation effect of the frequency of self-improvement behaviors with the organization change score (ideal-personality) is not significantly different from zero (at p < .001), b = 0.062, p = 0.182.

6.6.8.15 Productiveness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 5959.459 6047.389 0.916 0.071 0.06
# parameters of interest
params_lcs_produ_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_produ_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_produ_ideal_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~ sb07_08_t1", "sb07_08_t1 ~~ sb07_08_t1", "d_produ_1 ~ sb07_08_t1", # change goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
Joining with `by = join_by(term)`
kable(params_lcs_produ_ideal_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
produ_t2 ~ produ_t1 1.000 1.000 1.000 0.883 NA NA 1.000 1.000
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.578 NA NA 1.000 1.000
d_produ_1 ~1 -0.011 -0.091 0.068 -0.045 -0.472 0.637 -0.059 0.036
produ_t1 ~1 4.403 4.271 4.536 11.505 109.438 0.000 4.325 4.482
d_produ_1 ~~ d_produ_1 0.061 -0.028 0.150 0.975 2.252 0.024 0.008 0.114
produ_t1 ~~ d_produ_1 -0.009 -0.061 0.042 -0.101 -0.606 0.544 -0.040 0.021
d_produ_1 ~ sb07_08_t1 -0.040 -0.112 0.032 -0.159 -1.820 0.069 -0.083 0.003
sb07_08_t1 ~~ sb07_08_t1 0.997 0.778 1.216 1.000 14.992 0.000 0.867 1.127

The moderation effect of the facet-specific change goal with the productiveness change score (ideal-personality) is not significantly different from zero, b = -0.04, p = 0.069.

6.6.8.16 Productiveness - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 7266.77 7381.461 0.932 0.062 0.06
# parameters of interest
params_lcs_produ_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_produ_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_produ_ideal_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~ frequ", "frequ ~~ frequ", "produ_t1 ~ frequ", # frequency of self improvement
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
Joining with `by = join_by(term)`
kable(params_lcs_produ_ideal_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
produ_t2 ~ produ_t1 1.000 1.000 1.000 0.885 NA NA 1.000 1.000
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.580 NA NA 1.000 1.000
d_produ_1 ~1 -0.012 -0.091 0.068 -0.046 -0.478 0.633 -0.059 0.036
produ_t1 ~1 4.404 4.271 4.537 11.556 108.976 0.000 4.325 4.483
d_produ_1 ~~ d_produ_1 0.062 -0.028 0.152 0.992 2.274 0.023 0.009 0.115
produ_t1 ~~ d_produ_1 -0.013 -0.064 0.038 -0.137 -0.820 0.412 -0.043 0.018
produ_t1 ~ frequ 0.111 -0.022 0.243 0.201 2.754 0.006 0.032 0.190
d_produ_1 ~ frequ 0.031 -0.084 0.147 0.087 0.892 0.373 -0.037 0.100
frequ ~~ frequ 0.479 0.201 0.757 1.000 5.678 0.000 0.314 0.644

The moderation effect of the frequency of self-improvement behaviors with the productiveness change score (ideal-personality) is not significantly different from zero, b = 0.031, p = 0.373.

6.6.8.17 Responsibility - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7573.086 7661.016 0.935 0.055 0.051
# parameters of interest
params_lcs_respo_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_respo_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_respo_ideal_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~ sb07_09_t1", "sb07_09_t1 ~~ sb07_09_t1", "d_respo_1 ~ sb07_09_t1", # change goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
Joining with `by = join_by(term)`
kable(params_lcs_respo_ideal_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.019 NA NA 1.000 1.000
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.664 NA NA 1.000 1.000
d_respo_1 ~1 -0.006 -0.068 0.056 -0.032 -0.328 0.743 -0.043 0.031
respo_t1 ~1 4.188 4.006 4.371 14.275 75.458 0.000 4.080 4.297
d_respo_1 ~~ d_respo_1 0.037 -0.023 0.096 1.000 2.031 0.042 0.001 0.072
respo_t1 ~~ d_respo_1 -0.020 -0.062 0.022 -0.355 -1.569 0.117 -0.045 0.005
d_respo_1 ~ sb07_09_t1 -0.002 -0.070 0.066 -0.010 -0.095 0.924 -0.043 0.039
sb07_09_t1 ~~ sb07_09_t1 0.997 0.856 1.138 1.000 23.300 0.000 0.913 1.081

The moderation effect of the facet-specific change goal with the responsibility change score (ideal-personality) is not significantly different from zero, b = -0.002, p = 0.924.

6.6.8.18 Responsibility - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 8871.114 8985.805 0.94 0.053 0.056
# parameters of interest
params_lcs_respo_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_respo_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_respo_ideal_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~ frequ", "frequ ~~ frequ", "respo_t1 ~ frequ", # frequency of self improvement
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
Joining with `by = join_by(term)`
kable(params_lcs_respo_ideal_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.022 NA NA 1.000 1.000
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.667 NA NA 1.000 1.000
d_respo_1 ~1 -0.006 -0.067 0.056 -0.030 -0.310 0.757 -0.043 0.031
respo_t1 ~1 4.188 4.006 4.371 14.292 75.481 0.000 4.079 4.297
d_respo_1 ~~ d_respo_1 0.037 -0.023 0.096 1.000 2.019 0.044 0.001 0.072
respo_t1 ~~ d_respo_1 -0.020 -0.060 0.021 -0.370 -1.598 0.110 -0.044 0.004
respo_t1 ~ frequ 0.126 -0.026 0.278 0.301 2.731 0.006 0.036 0.216
d_respo_1 ~ frequ -0.006 -0.110 0.099 -0.021 -0.179 0.858 -0.068 0.057
frequ ~~ frequ 0.490 0.205 0.774 1.000 5.669 0.000 0.320 0.659

The moderation effect of the frequency of self-improvement behaviors with the responsibility change score (ideal-personality) is not significantly different from zero, b = -0.006, p = 0.858.

6.6.8.19 Anxiety - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7715.556 7803.486 0.949 0.031 0.047
# parameters of interest
params_lcs_anxie_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_anxie_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_anxie_ideal_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~ sb07_10_t1", "sb07_10_t1 ~~ sb07_10_t1", "d_anxie_1 ~ sb07_10_t1", # change goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
Joining with `by = join_by(term)`
kable(params_lcs_anxie_ideal_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.892 NA NA 1.000 1.000
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.874 NA NA 1.000 1.000
d_anxie_1 ~1 0.021 -0.060 0.103 0.083 0.861 0.389 -0.027 0.070
anxie_t1 ~1 1.404 1.300 1.507 5.350 44.734 0.000 1.342 1.465
d_anxie_1 ~~ d_anxie_1 0.066 -0.038 0.170 0.999 2.091 0.037 0.004 0.128
anxie_t1 ~~ d_anxie_1 -0.024 -0.070 0.023 -0.358 -1.686 0.092 -0.052 0.004
d_anxie_1 ~ sb07_10_t1 0.009 -0.077 0.095 0.035 0.339 0.734 -0.042 0.060
sb07_10_t1 ~~ sb07_10_t1 0.997 0.824 1.170 1.000 18.986 0.000 0.894 1.100

The moderation effect of the facet-specific change goal with the anxiety change score (ideal-personality) is not significantly different from zero, b = 0.009, p = 0.734.

6.6.8.20 Anxiety - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9025.691 9140.382 0.938 0.042 0.056
# parameters of interest
params_lcs_anxie_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_anxie_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_anxie_ideal_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~ frequ", "frequ ~~ frequ", "anxie_t1 ~ frequ", # frequency of self improvement
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
Joining with `by = join_by(term)`
kable(params_lcs_anxie_ideal_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.885 NA NA 1.000 1.000
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.879 NA NA 1.000 1.000
d_anxie_1 ~1 0.023 -0.062 0.108 0.086 0.901 0.367 -0.027 0.074
anxie_t1 ~1 1.403 1.299 1.507 5.132 44.401 0.000 1.341 1.465
d_anxie_1 ~~ d_anxie_1 0.073 -0.044 0.191 0.996 2.062 0.039 0.004 0.143
anxie_t1 ~~ d_anxie_1 -0.025 -0.079 0.028 -0.355 -1.564 0.118 -0.057 0.006
anxie_t1 ~ frequ -0.101 -0.259 0.057 -0.258 -2.102 0.036 -0.195 -0.007
d_anxie_1 ~ frequ 0.023 -0.116 0.162 0.060 0.549 0.583 -0.060 0.106
frequ ~~ frequ 0.488 0.197 0.779 1.000 5.513 0.000 0.315 0.661

The moderation effect of the frequency of self-improvement behaviors with the anxiety change score (ideal-personality) is not significantly different from zero, b = 0.023, p = 0.583.

6.6.8.21 Depression - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 6468.908 6556.838 0.899 0.069 0.066
# parameters of interest
params_lcs_depre_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_depre_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_depre_ideal_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~ sb07_11_t1", "sb07_11_t1 ~~ sb07_11_t1", "d_depre_1 ~ sb07_11_t1", # change goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
Joining with `by = join_by(term)`
kable(params_lcs_depre_ideal_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.036 NA NA 1.000 1.000
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.885 NA NA 1.000 1.000
d_depre_1 ~1 0.018 -0.048 0.085 0.073 0.902 0.367 -0.021 0.058
depre_t1 ~1 1.546 1.428 1.663 5.305 43.283 0.000 1.476 1.616
d_depre_1 ~~ d_depre_1 0.062 -0.013 0.136 0.995 2.735 0.006 0.017 0.106
depre_t1 ~~ d_depre_1 -0.034 -0.082 0.015 -0.467 -2.288 0.022 -0.063 -0.005
d_depre_1 ~ sb07_11_t1 0.017 -0.052 0.086 0.069 0.821 0.412 -0.024 0.058
sb07_11_t1 ~~ sb07_11_t1 0.997 0.875 1.119 1.000 26.880 0.000 0.924 1.070

The moderation effect of the facet-specific change goal with the depression change score (ideal-personality) is not significantly different from zero, b = 0.017, p = 0.412.

6.6.8.22 Depression - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 7780.879 7895.57 0.905 0.067 0.075
# parameters of interest
params_lcs_depre_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_depre_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_depre_ideal_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~ frequ", "frequ ~~ frequ", "depre_t1 ~ frequ", # frequency of self improvement
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
Joining with `by = join_by(term)`
kable(params_lcs_depre_ideal_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.036 NA NA 1.000 1.000
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.885 NA NA 1.000 1.000
d_depre_1 ~1 0.018 -0.049 0.085 0.072 0.889 0.374 -0.022 0.058
depre_t1 ~1 1.545 1.428 1.663 5.252 43.261 0.000 1.475 1.616
d_depre_1 ~~ d_depre_1 0.063 -0.014 0.140 0.998 2.709 0.007 0.017 0.109
depre_t1 ~~ d_depre_1 -0.034 -0.083 0.015 -0.466 -2.289 0.022 -0.063 -0.005
depre_t1 ~ frequ -0.055 -0.187 0.078 -0.128 -1.353 0.176 -0.134 0.024
d_depre_1 ~ frequ 0.015 -0.089 0.118 0.040 0.468 0.640 -0.047 0.076
frequ ~~ frequ 0.477 0.196 0.757 1.000 5.596 0.000 0.310 0.644

The moderation effect of the frequency of self-improvement behaviors with the depression change score (ideal-personality) is not significantly different from zero, b = 0.015, p = 0.64.

6.6.8.23 Volatility - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7252.407 7340.337 0.97 0.035 0.042
# parameters of interest
params_lcs_volat_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_volat_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_volat_ideal_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~ sb07_12_t1", "sb07_12_t1 ~~ sb07_12_t1", "d_volat_1 ~ sb07_12_t1", # change goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
Joining with `by = join_by(term)`
kable(params_lcs_volat_ideal_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
volat_t2 ~ volat_t1 1.000 1.000 1.000 0.842 NA NA 1.000 1.000
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.636 NA NA 1.000 1.000
d_volat_1 ~1 0.045 -0.057 0.148 0.143 1.448 0.148 -0.016 0.106
volat_t1 ~1 1.599 1.472 1.726 3.819 41.366 0.000 1.523 1.675
d_volat_1 ~~ d_volat_1 0.098 -0.035 0.232 0.985 2.432 0.015 0.019 0.178
volat_t1 ~~ d_volat_1 -0.013 -0.083 0.057 -0.099 -0.611 0.541 -0.055 0.029
d_volat_1 ~ sb07_12_t1 0.039 -0.063 0.141 0.124 1.265 0.206 -0.021 0.100
sb07_12_t1 ~~ sb07_12_t1 0.997 0.844 1.150 1.000 21.424 0.000 0.906 1.088

The moderation effect of the facet-specific change goal with the volatility change score (ideal-personality) is not significantly different from zero, b = 0.039, p = 0.206.

6.6.8.24 Volatility - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 8559.956 8674.648 0.961 0.041 0.053
# parameters of interest
params_lcs_volat_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_volat_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_volat_ideal_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~ frequ", "frequ ~~ frequ", "volat_t1 ~ frequ", # frequency of self improvement
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
Joining with `by = join_by(term)`
kable(params_lcs_volat_ideal_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
volat_t2 ~ volat_t1 1.000 1.000 1.000 0.841 NA NA 1.000 1.000
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.635 NA NA 1.000 1.000
d_volat_1 ~1 0.045 -0.057 0.148 0.144 1.452 0.146 -0.016 0.106
volat_t1 ~1 1.599 1.471 1.726 3.825 41.336 0.000 1.523 1.674
d_volat_1 ~~ d_volat_1 0.099 -0.034 0.232 0.994 2.440 0.015 0.019 0.178
volat_t1 ~~ d_volat_1 -0.016 -0.087 0.055 -0.123 -0.729 0.466 -0.058 0.027
volat_t1 ~ frequ -0.121 -0.274 0.033 -0.202 -2.591 0.010 -0.212 -0.029
d_volat_1 ~ frequ -0.036 -0.200 0.129 -0.079 -0.713 0.476 -0.134 0.062
frequ ~~ frequ 0.487 0.199 0.774 1.000 5.568 0.000 0.315 0.658

The moderation effect of the frequency of self-improvement behaviors with the volatility change score (ideal-personality) is not significantly different from zero, b = -0.036, p = 0.476.

6.6.8.25 Curiosity - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7929.001 8016.931 0.954 0.041 0.052
# parameters of interest
params_lcs_curio_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_curio_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_curio_ideal_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~ sb07_13_t1", "sb07_13_t1 ~~ sb07_13_t1", "d_curio_1 ~ sb07_13_t1", # change goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
Joining with `by = join_by(term)`
kable(params_lcs_curio_ideal_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.980 NA NA 1.000 1.000
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.469 NA NA 1.000 1.000
d_curio_1 ~1 0.024 -0.044 0.092 0.168 1.148 0.251 -0.017 0.064
curio_t1 ~1 4.536 4.417 4.655 15.372 125.891 0.000 4.465 4.607
d_curio_1 ~~ d_curio_1 0.020 -0.024 0.064 0.993 1.472 0.141 -0.007 0.046
curio_t1 ~~ d_curio_1 -0.008 -0.037 0.022 -0.190 -0.878 0.380 -0.025 0.010
d_curio_1 ~ sb07_13_t1 0.012 -0.057 0.081 0.084 0.569 0.569 -0.029 0.053
sb07_13_t1 ~~ sb07_13_t1 0.997 0.810 1.184 1.000 17.527 0.000 0.886 1.109

The moderation effect of the facet-specific change goal with the curiosity change score (ideal-personality) is not significantly different from zero, b = 0.012, p = 0.569.

6.6.8.26 Curiosity - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9239.834 9354.525 0.95 0.045 0.059
# parameters of interest
params_lcs_curio_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_curio_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_curio_ideal_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~ frequ", "frequ ~~ frequ", "curio_t1 ~ frequ", # frequency of self improvement
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
Joining with `by = join_by(term)`
kable(params_lcs_curio_ideal_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.977 NA NA 1.000 1.000
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.459 NA NA 1.000 1.000
d_curio_1 ~1 0.024 -0.047 0.095 0.165 1.101 0.271 -0.019 0.066
curio_t1 ~1 4.536 4.417 4.655 14.808 125.814 0.000 4.465 4.607
d_curio_1 ~~ d_curio_1 0.019 -0.028 0.067 0.934 1.338 0.181 -0.009 0.048
curio_t1 ~~ d_curio_1 -0.009 -0.041 0.023 -0.215 -0.943 0.346 -0.028 0.010
curio_t1 ~ frequ 0.038 -0.125 0.202 0.086 0.772 0.440 -0.059 0.136
d_curio_1 ~ frequ 0.054 -0.069 0.178 0.258 1.446 0.148 -0.019 0.128
frequ ~~ frequ 0.469 0.194 0.744 1.000 5.607 0.000 0.305 0.632

The moderation effect of the frequency of self-improvement behaviors with the curiosity change score (ideal-personality) is not significantly different from zero, b = 0.054, p = 0.148.

6.6.8.27 Aesthetic - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 8048.244 8136.174 0.989 0.027 0.045
# parameters of interest
params_lcs_aesth_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_aesth_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_aesth_ideal_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~ sb07_14_t1", "sb07_14_t1 ~~ sb07_14_t1", "d_aesth_1 ~ sb07_14_t1", # change goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
Joining with `by = join_by(term)`
kable(params_lcs_aesth_ideal_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.985 NA NA 1.000 1.000
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.540 NA NA 1.000 1.000
d_aesth_1 ~1 0.000 -0.005 0.005 0.002 0.015 0.988 -0.003 0.003
aesth_t1 ~1 2.936 2.707 3.164 119.527 42.231 0.000 2.799 3.072
d_aesth_1 ~~ d_aesth_1 0.000 0.000 0.000 0.998 2.253 0.024 0.000 0.000
aesth_t1 ~~ d_aesth_1 0.000 0.000 0.000 -0.243 -1.340 0.180 0.000 0.000
d_aesth_1 ~ sb07_14_t1 0.001 -0.004 0.005 0.045 0.430 0.667 -0.002 0.003
sb07_14_t1 ~~ sb07_14_t1 0.997 0.845 1.149 1.000 21.634 0.000 0.907 1.087

The moderation effect of the facet-specific change goal with the aesthetic change score (ideal-personality) is not significantly different from zero, b = 0.001, p = 0.667.

6.6.8.28 Aesthetic - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 9363.848 9478.54 0.981 0.033 0.051
# parameters of interest
params_lcs_aesth_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_aesth_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_aesth_ideal_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~ frequ", "frequ ~~ frequ", "aesth_t1 ~ frequ", # frequency of self improvement
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
Joining with `by = join_by(term)`
kable(params_lcs_aesth_ideal_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.986 NA NA 1.000 1.000
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.540 NA NA 1.000 1.000
d_aesth_1 ~1 0.000 -0.004 0.004 0.001 0.006 0.995 -0.002 0.002
aesth_t1 ~1 2.936 2.707 3.165 145.257 42.182 0.000 2.799 3.072
d_aesth_1 ~~ d_aesth_1 0.000 0.000 0.000 0.998 2.273 0.023 0.000 0.000
aesth_t1 ~~ d_aesth_1 0.000 0.000 0.000 -0.243 -1.403 0.161 0.000 0.000
aesth_t1 ~ frequ -0.006 -0.013 0.001 -0.207 -2.735 0.006 -0.010 -0.002
d_aesth_1 ~ frequ 0.001 -0.005 0.007 0.044 0.401 0.689 -0.003 0.004
frequ ~~ frequ 0.470 0.190 0.750 1.000 5.528 0.000 0.303 0.637

The moderation effect of the frequency of self-improvement behaviors with the aesthetic change score (ideal-personality) is not significantly different from zero, b = 0.001, p = 0.689.

6.6.8.29 Imagination - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 23 7242.518 7330.448 0.889 0.067 0.066
# parameters of interest
params_lcs_imagi_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_imagi_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_imagi_ideal_specif_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~ sb07_15_t1", "sb07_15_t1 ~~ sb07_15_t1", "d_imagi_1 ~ sb07_15_t1", # change goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
Joining with `by = join_by(term)`
kable(params_lcs_imagi_ideal_specif_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.068 NA NA 1.000 1.000
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.740 NA NA 1.000 1.000
d_imagi_1 ~1 0.022 -0.062 0.106 0.083 0.854 0.393 -0.028 0.072
imagi_t1 ~1 4.611 4.507 4.715 12.162 145.982 0.000 4.549 4.673
d_imagi_1 ~~ d_imagi_1 0.069 -0.013 0.151 0.999 2.772 0.006 0.020 0.118
imagi_t1 ~~ d_imagi_1 -0.043 -0.108 0.021 -0.435 -2.200 0.028 -0.082 -0.005
d_imagi_1 ~ sb07_15_t1 -0.010 -0.094 0.075 -0.036 -0.372 0.710 -0.060 0.041
sb07_15_t1 ~~ sb07_15_t1 0.997 0.847 1.147 1.000 21.903 0.000 0.908 1.086

The moderation effect of the facet-specific change goal with the imagination change score (ideal-personality) is not significantly different from zero, b = -0.01, p = 0.71.

6.6.8.30 Imagination - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
338 30 8546.95 8661.642 0.92 0.058 0.074
# parameters of interest
params_lcs_imagi_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_imagi_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_imagi_ideal_frequ_hyp6,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~ frequ", "frequ ~~ frequ", "imagi_t1 ~ frequ", # frequency of self improvement
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
Joining with `by = join_by(term)`
kable(params_lcs_imagi_ideal_frequ_hyp6, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.064 NA NA 1.000 1.000
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.746 NA NA 1.000 1.000
d_imagi_1 ~1 0.020 -0.062 0.102 0.079 0.821 0.412 -0.028 0.069
imagi_t1 ~1 4.612 4.508 4.715 12.468 146.635 0.000 4.550 4.673
d_imagi_1 ~~ d_imagi_1 0.067 -0.012 0.146 1.000 2.795 0.005 0.020 0.114
imagi_t1 ~~ d_imagi_1 -0.042 -0.107 0.023 -0.448 -2.140 0.032 -0.080 -0.004
imagi_t1 ~ frequ 0.116 -0.030 0.263 0.216 2.609 0.009 0.029 0.204
d_imagi_1 ~ frequ 0.006 -0.159 0.171 0.017 0.124 0.901 -0.092 0.105
frequ ~~ frequ 0.474 0.197 0.752 1.000 5.622 0.000 0.309 0.640

The moderation effect of the frequency of self-improvement behaviors with the imagination change score (ideal-personality) is not significantly different from zero, b = 0.006, p = 0.901.

6.6.9 Hyp 6: Effects summary

6.6.9.1 Summary: Current personality

Collect all relevant effects

Show the code
# create df for table:

# main effects (change score)
df_table_hyp6_main <- bind_rows(
  #traits
  params_lcs_extra_curr_specif_hyp6 %>% filter(term=="d_extra_1 ~1 "),
  params_lcs_extra_curr_frequ_hyp6 %>% filter(term=="d_extra_1 ~1 "),
  params_lcs_agree_curr_specif_hyp6 %>% filter(term=="d_agree_1 ~1 "),
  params_lcs_agree_curr_frequ_hyp6 %>% filter(term=="d_agree_1 ~1 "),
  params_lcs_consc_curr_specif_hyp6 %>% filter(term=="d_consc_1 ~1 "),
  params_lcs_consc_curr_frequ_hyp6 %>% filter(term=="d_consc_1 ~1 "),
  params_lcs_neuro_curr_specif_hyp6 %>% filter(term=="d_neuro_1 ~1 "),
  params_lcs_neuro_curr_frequ_hyp6 %>% filter(term=="d_neuro_1 ~1 "),
  params_lcs_openn_curr_specif_hyp6 %>% filter(term=="d_openn_1 ~1 "),
  params_lcs_openn_curr_frequ_hyp6 %>% filter(term=="d_openn_1 ~1 "),
  #facets
  params_lcs_socia_curr_specif_hyp6 %>% filter(term=="d_socia_1 ~1 "),
  params_lcs_socia_curr_frequ_hyp6 %>% filter(term=="d_socia_1 ~1 "),
  params_lcs_asser_curr_specif_hyp6 %>% filter(term=="d_asser_1 ~1 "),
  params_lcs_asser_curr_frequ_hyp6 %>% filter(term=="d_asser_1 ~1 "),
  params_lcs_energ_curr_specif_hyp6 %>% filter(term=="d_energ_1 ~1 "),
  params_lcs_energ_curr_frequ_hyp6 %>% filter(term=="d_energ_1 ~1 "),
  params_lcs_compa_curr_specif_hyp6 %>% filter(term=="d_compa_1 ~1 "),
  params_lcs_compa_curr_frequ_hyp6 %>% filter(term=="d_compa_1 ~1 "),
  params_lcs_respe_curr_specif_hyp6 %>% filter(term=="d_respe_1 ~1 "),
  params_lcs_respe_curr_frequ_hyp6 %>% filter(term=="d_respe_1 ~1 "),
  params_lcs_trust_curr_specif_hyp6 %>% filter(term=="d_trust_1 ~1 "),
  params_lcs_trust_curr_frequ_hyp6 %>% filter(term=="d_trust_1 ~1 "),
  params_lcs_organ_curr_specif_hyp6 %>% filter(term=="d_organ_1 ~1 "),
  params_lcs_organ_curr_frequ_hyp6 %>% filter(term=="d_organ_1 ~1 "),
  params_lcs_produ_curr_specif_hyp6 %>% filter(term=="d_produ_1 ~1 "),
  params_lcs_produ_curr_frequ_hyp6 %>% filter(term=="d_produ_1 ~1 "),
  params_lcs_respo_curr_specif_hyp6 %>% filter(term=="d_respo_1 ~1 "),
  params_lcs_respo_curr_frequ_hyp6 %>% filter(term=="d_respo_1 ~1 "),
  params_lcs_anxie_curr_specif_hyp6 %>% filter(term=="d_anxie_1 ~1 "),
  params_lcs_anxie_curr_frequ_hyp6 %>% filter(term=="d_anxie_1 ~1 "),
  params_lcs_depre_curr_specif_hyp6 %>% filter(term=="d_depre_1 ~1 "),
  params_lcs_depre_curr_frequ_hyp6 %>% filter(term=="d_depre_1 ~1 "),
  params_lcs_volat_curr_specif_hyp6 %>% filter(term=="d_volat_1 ~1 "),
  params_lcs_volat_curr_frequ_hyp6 %>% filter(term=="d_volat_1 ~1 "),
  params_lcs_curio_curr_specif_hyp6 %>% filter(term=="d_curio_1 ~1 "),
  params_lcs_curio_curr_frequ_hyp6 %>% filter(term=="d_curio_1 ~1 "),
  params_lcs_aesth_curr_specif_hyp6 %>% filter(term=="d_aesth_1 ~1 "),
  params_lcs_aesth_curr_frequ_hyp6 %>% filter(term=="d_aesth_1 ~1 "),
  params_lcs_imagi_curr_specif_hyp6 %>% filter(term=="d_imagi_1 ~1 "),
  params_lcs_imagi_curr_frequ_hyp6 %>% filter(term=="d_imagi_1 ~1 ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("Goals", "Frequency"), 20)) %>% 
  select(trait, moderator, est_main = estimate, std_main = std.all, p_main = p.value)

# moderation effects
df_table_hyp6_mod <- bind_rows(
  #traits
  params_lcs_extra_curr_specif_hyp6 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_curr_frequ_hyp6 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_curr_specif_hyp6 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_curr_frequ_hyp6 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_curr_specif_hyp6 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_curr_frequ_hyp6 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_curr_specif_hyp6 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_curr_frequ_hyp6 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_curr_specif_hyp6 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_curr_frequ_hyp6 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_curr_specif_hyp6 %>% filter(term=="d_socia_1 ~ sb07_01_t1"),
  params_lcs_socia_curr_frequ_hyp6 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_curr_specif_hyp6 %>% filter(term=="d_asser_1 ~ sb07_02_t1"),
  params_lcs_asser_curr_frequ_hyp6 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_curr_specif_hyp6 %>% filter(term=="d_energ_1 ~ sb07_03_t1"),
  params_lcs_energ_curr_frequ_hyp6 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_curr_specif_hyp6 %>% filter(term=="d_compa_1 ~ sb07_04_t1"),
  params_lcs_compa_curr_frequ_hyp6 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_curr_specif_hyp6 %>% filter(term=="d_respe_1 ~ sb07_05_t1"),
  params_lcs_respe_curr_frequ_hyp6 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_curr_specif_hyp6 %>% filter(term=="d_trust_1 ~ sb07_06_t1"),
  params_lcs_trust_curr_frequ_hyp6 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_curr_specif_hyp6 %>% filter(term=="d_organ_1 ~ sb07_07_t1"),
  params_lcs_organ_curr_frequ_hyp6 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_curr_specif_hyp6 %>% filter(term=="d_produ_1 ~ sb07_08_t1"),
  params_lcs_produ_curr_frequ_hyp6 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_curr_specif_hyp6 %>% filter(term=="d_respo_1 ~ sb07_09_t1"),
  params_lcs_respo_curr_frequ_hyp6 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_curr_specif_hyp6 %>% filter(term=="d_anxie_1 ~ sb07_10_t1"),
  params_lcs_anxie_curr_frequ_hyp6 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_curr_specif_hyp6 %>% filter(term=="d_depre_1 ~ sb07_11_t1"),
  params_lcs_depre_curr_frequ_hyp6 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_curr_specif_hyp6 %>% filter(term=="d_volat_1 ~ sb07_12_t1"),
  params_lcs_volat_curr_frequ_hyp6 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_curr_specif_hyp6 %>% filter(term=="d_curio_1 ~ sb07_13_t1"),
  params_lcs_curio_curr_frequ_hyp6 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_curr_specif_hyp6 %>% filter(term=="d_aesth_1 ~ sb07_14_t1"),
  params_lcs_aesth_curr_frequ_hyp6 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_curr_specif_hyp6 %>% filter(term=="d_imagi_1 ~ sb07_15_t1"),
  params_lcs_imagi_curr_frequ_hyp6 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("Goals", "Frequency"), 20)) %>% 
  select(trait, moderator, est_mod = estimate, std_mod = std.all, p_mod = p.value)

# combine
df_table_hyp6 <- df_table_hyp6_main %>% left_join(df_table_hyp6_mod)

Results summary across the Big Five traits: trait-specific change goals (Goals) and frequency of self-improvement behaviors (Frequency) as moderators on the latent change score. *_main* refers to the main effects (change scores) and *_mod* to the moderation effects.

kable(df_table_hyp6[1:10, ], digits = 3)
trait moderator est_main std_main p_main est_mod std_mod p_mod
extraversion Goals 0.098 0.335 0.000 0.085 0.173 0.209
extraversion Frequency 0.096 0.333 0.001 0.113 0.265 0.005
agreeableness Goals 0.020 0.100 0.261 0.042 0.139 0.205
agreeableness Frequency 0.022 0.101 0.269 0.013 0.040 0.714
conscientiousness Goals 0.106 0.256 0.000 0.048 0.093 0.195
conscientiousness Frequency 0.103 0.252 0.000 0.043 0.072 0.398
neuroticism Goals -0.179 -0.387 0.000 -0.106 -0.173 0.025
neuroticism Frequency -0.180 -0.391 0.000 -0.035 -0.051 0.528
openness Goals 0.080 0.299 0.001 0.009 0.020 0.839
openness Frequency 0.077 0.291 0.001 0.041 0.106 0.288

No moderation effects that are significantly different from zero at p < .001. Only at p < .01 do we find a significant effect:

  • changes in current-level extraversion are moderated by the frequency of self-improvement behaviors

Results summary across the Big Five facets: trait-specific change goals (goals) and frequency of self-improvement behaviors (frequency) as moderators on the latent change score. *_main* refers to the main effects (change scores) and *_mod* to the moderation effects.

kable(df_table_hyp6[11:40, ], digits = 3)
trait moderator est_main std_main p_main est_mod std_mod p_mod
sociability Goals 0.082 0.208 0.031 0.037 0.095 0.316
sociability Frequency 0.073 0.193 0.046 0.198 0.359 0.000
assertiveness Goals 0.065 0.232 0.014 -0.018 -0.066 0.462
assertiveness Frequency 0.058 0.214 0.019 0.030 0.077 0.449
energy Goals 0.057 0.375 0.005 0.053 0.348 0.002
energy Frequency 0.058 0.370 0.005 0.062 0.267 0.038
compassion Goals 0.102 0.411 0.001 0.064 0.259 0.050
compassion Frequency 0.103 0.409 0.001 0.015 0.042 0.796
respectfulness Goals 0.020 0.064 0.488 0.042 0.133 0.207
respectfulness Frequency 0.018 0.057 0.540 -0.096 -0.211 0.039
trust Goals 0.101 0.321 0.008 0.065 0.205 0.099
trust Frequency 0.091 0.313 0.020 -0.001 -0.002 0.990
organization Goals 0.096 0.196 0.031 0.083 0.170 0.049
organization Frequency 0.088 0.192 0.036 0.026 0.039 0.706
productiveness Goals 0.166 0.274 0.000 0.077 0.126 0.106
productiveness Frequency 0.162 0.271 0.000 0.110 0.124 0.177
responsibility Goals 0.057 0.224 0.026 0.031 0.120 0.222
responsibility Frequency 0.057 0.221 0.031 0.001 0.002 0.989
anxiety Goals -0.212 -0.497 0.000 -0.153 -0.358 0.001
anxiety Frequency -0.217 -0.502 0.000 -0.058 -0.092 0.462
depression Goals -0.112 -0.310 0.000 -0.060 -0.166 0.021
depression Frequency -0.117 -0.316 0.000 -0.034 -0.062 0.479
volatility Goals -0.179 -0.313 0.000 -0.040 -0.069 0.407
volatility Frequency -0.177 -0.313 0.000 0.040 0.049 0.631
curiosity Goals 0.038 0.198 0.118 0.057 0.296 0.024
curiosity Frequency 0.037 0.196 0.129 0.104 0.373 0.011
aesthetic Goals 0.007 0.074 0.443 -0.002 -0.019 0.838
aesthetic Frequency 0.007 0.075 0.438 -0.008 -0.053 0.624
imagination Goals 0.111 0.328 0.001 0.011 0.031 0.748
imagination Frequency 0.110 0.317 0.001 0.065 0.126 0.268

Looking at the facets, we only find one moderator effect that significantly differ from zero (p < .001) and two other effects at p < .05:

  • Within extraversion, we find the effect for the frequency of self-improvement behaviors from above represented in the facet sociability, and at p < .05 in energy (but in the other, unexpected direction).
  • Within openness, change in the curiosity facet is moderated by the frequency of self-improvement behaviors (at p < .01).

Prepare data frame for plotting:

Show the code
df_table_hyp6_plot <- bind_rows(
  #traits
  params_lcs_extra_curr_specif_hyp6 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_curr_frequ_hyp6 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_curr_specif_hyp6 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_curr_frequ_hyp6 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_curr_specif_hyp6 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_curr_frequ_hyp6 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_curr_specif_hyp6 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_curr_frequ_hyp6 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_curr_specif_hyp6 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_curr_frequ_hyp6 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_curr_specif_hyp6 %>% filter(term=="d_socia_1 ~ sb07_01_t1"),
  params_lcs_socia_curr_frequ_hyp6 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_curr_specif_hyp6 %>% filter(term=="d_asser_1 ~ sb07_02_t1"),
  params_lcs_asser_curr_frequ_hyp6 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_curr_specif_hyp6 %>% filter(term=="d_energ_1 ~ sb07_03_t1"),
  params_lcs_energ_curr_frequ_hyp6 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_curr_specif_hyp6 %>% filter(term=="d_compa_1 ~ sb07_04_t1"),
  params_lcs_compa_curr_frequ_hyp6 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_curr_specif_hyp6 %>% filter(term=="d_respe_1 ~ sb07_05_t1"),
  params_lcs_respe_curr_frequ_hyp6 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_curr_specif_hyp6 %>% filter(term=="d_trust_1 ~ sb07_06_t1"),
  params_lcs_trust_curr_frequ_hyp6 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_curr_specif_hyp6 %>% filter(term=="d_organ_1 ~ sb07_07_t1"),
  params_lcs_organ_curr_frequ_hyp6 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_curr_specif_hyp6 %>% filter(term=="d_produ_1 ~ sb07_08_t1"),
  params_lcs_produ_curr_frequ_hyp6 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_curr_specif_hyp6 %>% filter(term=="d_respo_1 ~ sb07_09_t1"),
  params_lcs_respo_curr_frequ_hyp6 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_curr_specif_hyp6 %>% filter(term=="d_anxie_1 ~ sb07_10_t1"),
  params_lcs_anxie_curr_frequ_hyp6 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_curr_specif_hyp6 %>% filter(term=="d_depre_1 ~ sb07_11_t1"),
  params_lcs_depre_curr_frequ_hyp6 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_curr_specif_hyp6 %>% filter(term=="d_volat_1 ~ sb07_12_t1"),
  params_lcs_volat_curr_frequ_hyp6 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_curr_specif_hyp6 %>% filter(term=="d_curio_1 ~ sb07_13_t1"),
  params_lcs_curio_curr_frequ_hyp6 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_curr_specif_hyp6 %>% filter(term=="d_aesth_1 ~ sb07_14_t1"),
  params_lcs_aesth_curr_frequ_hyp6 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_curr_specif_hyp6 %>% filter(term=="d_imagi_1 ~ sb07_15_t1"),
  params_lcs_imagi_curr_frequ_hyp6 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("Goals", "Frequency"), 20)) %>% 
  select(trait, moderator, estimate, 
         ci999lo, ci999hi, ci95lo, ci95hi, std.all, statistic, p.value)

df_table_hyp6_plot <- df_table_hyp6_plot %>% 
  mutate(include_0 = ifelse(ci999lo < 0 & ci999hi > 0, "n.s.", "*")) %>% 
  mutate(ref = factor("Current", levels = c("Current"), labels = c("Current"))) %>% 
  mutate(moderator = factor(moderator, levels = c("Goals", "Frequency"), 
                            labels = c("Goals", "Frequency"))) %>% 
  mutate(trait = factor(trait, levels = names(b5_vars), 
                        labels = stringr::str_to_title(names(b5_vars))))

Plotting the effect size across all analyses (only showing the moderation effects):

  • Current = current-level personality
  • Goals = specific, facet-level change goal(s) as moderator
  • Frequency = frequency of self-improvement behavior as moderator

Important: these show both 99.9% and 95% confidence intervals (for better visual comparability with Study 1 plot)

Show the code
ggplot(df_table_hyp6_plot, aes(x = fct_rev(trait), y = estimate, color = include_0)) +
  geom_hline(yintercept=0, linetype = 3) +
  geom_point(size=3, position=position_dodge(0.4)) + 
  geom_errorbar(aes(ymin = ci999lo, ymax = ci999hi, color = include_0), width=.2,
                position=position_dodge(0.4), size = 0.2, alpha = 0.75) +
  geom_errorbar(aes(ymin = ci95lo, ymax = ci95hi, color = include_0), width=.2,
                position=position_dodge(0.4)) +
  scale_color_manual(values = c("#000000","#A9A9A9")) +   
  facet_wrap( ~ ref + moderator, ncol = 2) +
  theme_bw() +
  scale_shape_manual(values=c(18)) + 
  ylab("Effect Estimates (99.9% / 95% CI)") +
  xlab("") +
  theme(legend.title=element_blank()) +
  theme(legend.text=element_text(size=12)) +
  coord_flip() +
  theme(strip.text.x = element_text(size = 12)) +
  theme(axis.text.x=element_text(size=10, angle = 45, hjust = 1), axis.text.y=element_text(size=12)) + 
  guides(color="none")
Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
ℹ Please use `linewidth` instead.

6.6.9.2 Summary: Ideal personality

Run models for all facets with a template & loop:

Show the code
# create df for table:

# main effects (change score)
df_table_hyp6_ideal_main <- bind_rows(
  #traits
  params_lcs_extra_ideal_specif_hyp6 %>% filter(term=="d_extra_1 ~1 "),
  params_lcs_extra_ideal_frequ_hyp6 %>% filter(term=="d_extra_1 ~1 "),
  params_lcs_agree_ideal_specif_hyp6 %>% filter(term=="d_agree_1 ~1 "),
  params_lcs_agree_ideal_frequ_hyp6 %>% filter(term=="d_agree_1 ~1 "),
  params_lcs_consc_ideal_specif_hyp6 %>% filter(term=="d_consc_1 ~1 "),
  params_lcs_consc_ideal_frequ_hyp6 %>% filter(term=="d_consc_1 ~1 "),
  params_lcs_neuro_ideal_specif_hyp6 %>% filter(term=="d_neuro_1 ~1 "),
  params_lcs_neuro_ideal_frequ_hyp6 %>% filter(term=="d_neuro_1 ~1 "),
  params_lcs_openn_ideal_specif_hyp6 %>% filter(term=="d_openn_1 ~1 "),
  params_lcs_openn_ideal_frequ_hyp6 %>% filter(term=="d_openn_1 ~1 "),
  #facets
  params_lcs_socia_ideal_specif_hyp6 %>% filter(term=="d_socia_1 ~1 "),
  params_lcs_socia_ideal_frequ_hyp6 %>% filter(term=="d_socia_1 ~1 "),
  params_lcs_asser_ideal_specif_hyp6 %>% filter(term=="d_asser_1 ~1 "),
  params_lcs_asser_ideal_frequ_hyp6 %>% filter(term=="d_asser_1 ~1 "),
  params_lcs_energ_ideal_specif_hyp6 %>% filter(term=="d_energ_1 ~1 "),
  params_lcs_energ_ideal_frequ_hyp6 %>% filter(term=="d_energ_1 ~1 "),
  params_lcs_compa_ideal_specif_hyp6 %>% filter(term=="d_compa_1 ~1 "),
  params_lcs_compa_ideal_frequ_hyp6 %>% filter(term=="d_compa_1 ~1 "),
  params_lcs_respe_ideal_specif_hyp6 %>% filter(term=="d_respe_1 ~1 "),
  params_lcs_respe_ideal_frequ_hyp6 %>% filter(term=="d_respe_1 ~1 "),
  params_lcs_trust_ideal_specif_hyp6 %>% filter(term=="d_trust_1 ~1 "),
  params_lcs_trust_ideal_frequ_hyp6 %>% filter(term=="d_trust_1 ~1 "),
  params_lcs_organ_ideal_specif_hyp6 %>% filter(term=="d_organ_1 ~1 "),
  params_lcs_organ_ideal_frequ_hyp6 %>% filter(term=="d_organ_1 ~1 "),
  params_lcs_produ_ideal_specif_hyp6 %>% filter(term=="d_produ_1 ~1 "),
  params_lcs_produ_ideal_frequ_hyp6 %>% filter(term=="d_produ_1 ~1 "),
  params_lcs_respo_ideal_specif_hyp6 %>% filter(term=="d_respo_1 ~1 "),
  params_lcs_respo_ideal_frequ_hyp6 %>% filter(term=="d_respo_1 ~1 "),
  params_lcs_anxie_ideal_specif_hyp6 %>% filter(term=="d_anxie_1 ~1 "),
  params_lcs_anxie_ideal_frequ_hyp6 %>% filter(term=="d_anxie_1 ~1 "),
  params_lcs_depre_ideal_specif_hyp6 %>% filter(term=="d_depre_1 ~1 "),
  params_lcs_depre_ideal_frequ_hyp6 %>% filter(term=="d_depre_1 ~1 "),
  params_lcs_volat_ideal_specif_hyp6 %>% filter(term=="d_volat_1 ~1 "),
  params_lcs_volat_ideal_frequ_hyp6 %>% filter(term=="d_volat_1 ~1 "),
  params_lcs_curio_ideal_specif_hyp6 %>% filter(term=="d_curio_1 ~1 "),
  params_lcs_curio_ideal_frequ_hyp6 %>% filter(term=="d_curio_1 ~1 "),
  params_lcs_aesth_ideal_specif_hyp6 %>% filter(term=="d_aesth_1 ~1 "),
  params_lcs_aesth_ideal_frequ_hyp6 %>% filter(term=="d_aesth_1 ~1 "),
  params_lcs_imagi_ideal_specif_hyp6 %>% filter(term=="d_imagi_1 ~1 "),
  params_lcs_imagi_ideal_frequ_hyp6 %>% filter(term=="d_imagi_1 ~1 ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("Goals", "Frequency"), 20)) %>% 
  select(trait, moderator, est_main = estimate, std_main = std.all, p_main = p.value)

# moderation effects
df_table_hyp6_ideal_mod <- bind_rows(
  #traits
  params_lcs_extra_ideal_specif_hyp6 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_ideal_frequ_hyp6 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_ideal_specif_hyp6 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_ideal_frequ_hyp6 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_ideal_specif_hyp6 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_ideal_frequ_hyp6 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_ideal_specif_hyp6 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_ideal_frequ_hyp6 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_ideal_specif_hyp6 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_ideal_frequ_hyp6 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_ideal_specif_hyp6 %>% filter(term=="d_socia_1 ~ sb07_01_t1"),
  params_lcs_socia_ideal_frequ_hyp6 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_ideal_specif_hyp6 %>% filter(term=="d_asser_1 ~ sb07_02_t1"),
  params_lcs_asser_ideal_frequ_hyp6 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_ideal_specif_hyp6 %>% filter(term=="d_energ_1 ~ sb07_03_t1"),
  params_lcs_energ_ideal_frequ_hyp6 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_ideal_specif_hyp6 %>% filter(term=="d_compa_1 ~ sb07_04_t1"),
  params_lcs_compa_ideal_frequ_hyp6 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_ideal_specif_hyp6 %>% filter(term=="d_respe_1 ~ sb07_05_t1"),
  params_lcs_respe_ideal_frequ_hyp6 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_ideal_specif_hyp6 %>% filter(term=="d_trust_1 ~ sb07_06_t1"),
  params_lcs_trust_ideal_frequ_hyp6 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_ideal_specif_hyp6 %>% filter(term=="d_organ_1 ~ sb07_07_t1"),
  params_lcs_organ_ideal_frequ_hyp6 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_ideal_specif_hyp6 %>% filter(term=="d_produ_1 ~ sb07_08_t1"),
  params_lcs_produ_ideal_frequ_hyp6 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_ideal_specif_hyp6 %>% filter(term=="d_respo_1 ~ sb07_09_t1"),
  params_lcs_respo_ideal_frequ_hyp6 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_ideal_specif_hyp6 %>% filter(term=="d_anxie_1 ~ sb07_10_t1"),
  params_lcs_anxie_ideal_frequ_hyp6 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_ideal_specif_hyp6 %>% filter(term=="d_depre_1 ~ sb07_11_t1"),
  params_lcs_depre_ideal_frequ_hyp6 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_ideal_specif_hyp6 %>% filter(term=="d_volat_1 ~ sb07_12_t1"),
  params_lcs_volat_ideal_frequ_hyp6 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_ideal_specif_hyp6 %>% filter(term=="d_curio_1 ~ sb07_13_t1"),
  params_lcs_curio_ideal_frequ_hyp6 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_ideal_specif_hyp6 %>% filter(term=="d_aesth_1 ~ sb07_14_t1"),
  params_lcs_aesth_ideal_frequ_hyp6 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_ideal_specif_hyp6 %>% filter(term=="d_imagi_1 ~ sb07_15_t1"),
  params_lcs_imagi_ideal_frequ_hyp6 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("Goals", "Frequency"), 20)) %>% 
  select(trait, moderator, est_mod = estimate, std_mod = std.all, p_mod = p.value)

# combine
df_table_hyp6_ideal <- df_table_hyp6_ideal_main %>% left_join(df_table_hyp6_ideal_mod)

Results summary across the Big Five traits: trait-specific change goals (Goals) and frequency of self-improvement behaviors (Frequency) as moderators on the latent change score. *_main* refers to the main effects (change scores) and *_mod* to the moderation effects.

kable(df_table_hyp6_ideal[1:10, ], digits = 3)
trait moderator est_main std_main p_main est_mod std_mod p_mod
extraversion Goals -0.019 -0.080 0.388 0.037 0.071 0.691
extraversion Frequency -0.019 -0.079 0.393 0.035 0.103 0.351
agreeableness Goals -0.030 -0.111 0.178 0.019 0.048 0.657
agreeableness Frequency -0.030 -0.112 0.175 -0.032 -0.084 0.427
conscientiousness Goals 0.009 0.035 0.673 -0.046 -0.136 0.145
conscientiousness Frequency 0.010 0.037 0.658 0.031 0.082 0.323
neuroticism Goals 0.042 0.116 0.123 0.071 0.142 0.129
neuroticism Frequency 0.042 0.114 0.127 -0.004 -0.008 0.931
openness Goals 0.016 0.109 0.258 0.000 0.000 0.999
openness Frequency 0.017 0.110 0.259 0.011 0.049 0.659

No significant moderation effects at the domain level.

Results summary across the Big Five facets: trait-specific change goals (Goals) and frequency of self-improvement behaviors (Frequency) as moderators on the latent change score. *_main* refers to the main effects (change scores) and *_mod* to the moderation effects.

kable(df_table_hyp6_ideal[11:40, ], digits = 3)
trait moderator est_main std_main p_main est_mod std_mod p_mod
sociability Goals -0.030 -0.113 0.286 -0.064 -0.235 0.043
sociability Frequency -0.032 -0.115 0.277 0.056 0.140 0.297
assertiveness Goals -0.005 -0.025 0.808 0.003 0.016 0.882
assertiveness Frequency -0.004 -0.020 0.837 0.016 0.054 0.622
energy Goals -0.038 -0.317 0.044 -0.012 -0.096 0.406
energy Frequency -0.040 -0.330 0.034 0.016 0.095 0.546
compassion Goals -0.041 -0.185 0.253 0.057 0.259 0.109
compassion Frequency -0.042 -0.185 0.251 0.011 0.035 0.855
respectfulness Goals 0.001 0.002 0.984 -0.013 -0.053 0.638
respectfulness Frequency -0.001 -0.004 0.967 -0.045 -0.131 0.207
trust Goals -0.062 -0.479 0.006 0.022 0.167 0.370
trust Frequency -0.062 -0.482 0.007 -0.031 -0.163 0.459
organization Goals 0.019 0.066 0.564 -0.040 -0.143 0.234
organization Frequency 0.021 0.077 0.500 0.062 0.158 0.182
productiveness Goals -0.011 -0.045 0.637 -0.040 -0.159 0.069
productiveness Frequency -0.012 -0.046 0.633 0.031 0.087 0.373
responsibility Goals -0.006 -0.032 0.743 -0.002 -0.010 0.924
responsibility Frequency -0.006 -0.030 0.757 -0.006 -0.021 0.858
anxiety Goals 0.021 0.083 0.389 0.009 0.035 0.734
anxiety Frequency 0.023 0.086 0.367 0.023 0.060 0.583
depression Goals 0.018 0.073 0.367 0.017 0.069 0.412
depression Frequency 0.018 0.072 0.374 0.015 0.040 0.640
volatility Goals 0.045 0.143 0.148 0.039 0.124 0.206
volatility Frequency 0.045 0.144 0.146 -0.036 -0.079 0.476
curiosity Goals 0.024 0.168 0.251 0.012 0.084 0.569
curiosity Frequency 0.024 0.165 0.271 0.054 0.258 0.148
aesthetic Goals 0.000 0.002 0.988 0.001 0.045 0.667
aesthetic Frequency 0.000 0.001 0.995 0.001 0.044 0.689
imagination Goals 0.022 0.083 0.393 -0.010 -0.036 0.710
imagination Frequency 0.020 0.079 0.412 0.006 0.017 0.901

No significant moderation effects at the facet level (at p < .001).

Prepare data frame for plotting:

Show the code
df_table_hyp6_plot_ideal <- bind_rows(
  #traits
  params_lcs_extra_ideal_specif_hyp6 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_ideal_frequ_hyp6 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_ideal_specif_hyp6 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_ideal_frequ_hyp6 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_ideal_specif_hyp6 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_ideal_frequ_hyp6 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_ideal_specif_hyp6 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_ideal_frequ_hyp6 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_ideal_specif_hyp6 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_ideal_frequ_hyp6 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_ideal_specif_hyp6 %>% filter(term=="d_socia_1 ~ sb07_01_t1"),
  params_lcs_socia_ideal_frequ_hyp6 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_ideal_specif_hyp6 %>% filter(term=="d_asser_1 ~ sb07_02_t1"),
  params_lcs_asser_ideal_frequ_hyp6 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_ideal_specif_hyp6 %>% filter(term=="d_energ_1 ~ sb07_03_t1"),
  params_lcs_energ_ideal_frequ_hyp6 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_ideal_specif_hyp6 %>% filter(term=="d_compa_1 ~ sb07_04_t1"),
  params_lcs_compa_ideal_frequ_hyp6 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_ideal_specif_hyp6 %>% filter(term=="d_respe_1 ~ sb07_05_t1"),
  params_lcs_respe_ideal_frequ_hyp6 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_ideal_specif_hyp6 %>% filter(term=="d_trust_1 ~ sb07_06_t1"),
  params_lcs_trust_ideal_frequ_hyp6 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_ideal_specif_hyp6 %>% filter(term=="d_organ_1 ~ sb07_07_t1"),
  params_lcs_organ_ideal_frequ_hyp6 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_ideal_specif_hyp6 %>% filter(term=="d_produ_1 ~ sb07_08_t1"),
  params_lcs_produ_ideal_frequ_hyp6 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_ideal_specif_hyp6 %>% filter(term=="d_respo_1 ~ sb07_09_t1"),
  params_lcs_respo_ideal_frequ_hyp6 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_ideal_specif_hyp6 %>% filter(term=="d_anxie_1 ~ sb07_10_t1"),
  params_lcs_anxie_ideal_frequ_hyp6 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_ideal_specif_hyp6 %>% filter(term=="d_depre_1 ~ sb07_11_t1"),
  params_lcs_depre_ideal_frequ_hyp6 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_ideal_specif_hyp6 %>% filter(term=="d_volat_1 ~ sb07_12_t1"),
  params_lcs_volat_ideal_frequ_hyp6 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_ideal_specif_hyp6 %>% filter(term=="d_curio_1 ~ sb07_13_t1"),
  params_lcs_curio_ideal_frequ_hyp6 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_ideal_specif_hyp6 %>% filter(term=="d_aesth_1 ~ sb07_14_t1"),
  params_lcs_aesth_ideal_frequ_hyp6 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_ideal_specif_hyp6 %>% filter(term=="d_imagi_1 ~ sb07_15_t1"),
  params_lcs_imagi_ideal_frequ_hyp6 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("Goals", "Frequency"), 20)) %>% 
  select(trait, moderator, estimate, 
         ci999lo, ci999hi, ci95lo, ci95hi, std.all, statistic, p.value)

df_table_hyp6_plot_ideal <- df_table_hyp6_plot_ideal %>% 
  mutate(include_0 = ifelse(ci999lo < 0 & ci999hi > 0, "n.s.", "*")) %>% 
  mutate(ref = factor("Ideal", levels = c("Ideal"), labels = c("Ideal"))) %>% 
  mutate(moderator = factor(moderator, levels = c("Goals", "Frequency"), 
                            labels = c("Goals", "Frequency"))) %>% 
  mutate(trait = factor(trait, levels = names(b5_vars), 
                        labels = stringr::str_to_title(names(b5_vars))))

Plotting the effect size across all analyses (only showing the moderation effects):

  • Ideal = ideal-level personality
  • Goals = specific, facet-level change goal(s) as moderator
  • Frequency = frequency of self-improvement behavior as moderator

Important: these show both 99.9% and 95% confidence intervals (for better visual comparability with Study 1 plot)

Show the code
ggplot(df_table_hyp6_plot_ideal, aes(x = fct_rev(trait), y = estimate, color = include_0)) +
  geom_hline(yintercept=0, linetype = 3) +
  geom_point(size=3, position=position_dodge(0.4)) + 
  geom_errorbar(aes(ymin = ci999lo, ymax = ci999hi, color = include_0), width=.2,
                position=position_dodge(0.4), size = 0.2, alpha = 0.75) +
  geom_errorbar(aes(ymin = ci95lo, ymax = ci95hi, color = include_0), width=.2,
                position=position_dodge(0.4)) +
  scale_color_manual(values = c("#A9A9A9", "#000000")) + # reversed here because all n.s.
  facet_wrap( ~ ref + moderator, ncol = 2) +
  theme_bw() +
  scale_shape_manual(values=c(18)) + 
  ylab("Effect Estimates (99.9% / 95% CI)") +
  xlab("") +
  theme(legend.title=element_blank()) +
  theme(legend.text=element_text(size=12)) +
  coord_flip() +
  theme(strip.text.x = element_text(size = 12)) +
  theme(axis.text.x=element_text(size=10, angle = 45, hjust = 1), axis.text.y=element_text(size=12)) + 
  guides(color="none")

6.7 H7: Desire to change and frequency of self-acceptance behaviors as moderators of change in personality in self-acceptance group

In the self-acceptance group, change in ideal-personality ratings but not change in current-personality ratings will be moderated by acceptance goals (both general and trait-/facet-specific goals) and the frequency of self-acceptance behaviors.

We will test this one domain/facet at a time. To test this hypothesis, we will estimate the mean-level difference across time for both current and ideal trait ratings using latent change models and specify acceptance goals (or the frequency of self-acceptance behaviors) as a moderator of latent trait change. We will check in a second set of models whether changes in ideal-personality ratings persist from T2 to T3.

Reshape and split data set by intervention group:

Show the code
# from T! to T2
df_sbsa2_wide_pers_sa_mod <- df_sbsa2 %>% 
  filter(rando=="Self-Acceptance" & time %in% c(1,2)) %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sa07", # facet-specific acceptance goals
                                  "sa04"))) %>% # frequency self-acceptance behaviors
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with(c("sa07", "sa04")))) %>% 
  select(-c(sa07_01_t2, sa07_02_t2, sa07_03_t2, sa07_04_t2, sa07_05_t2, 
            sa07_06_t2, sa07_07_t2, sa07_08_t2, sa07_09_t2, sa07_10_t2, 
            sa07_11_t2, sa07_12_t2, sa07_13_t2, sa07_14_t2, sa07_15_t2, 
            sa04_01_t1, sa04_02_t1, sa04_03_t1)) # frequency of self-acceptance behaviors measured at T2
# standardize goal variables (better interpretation for when they are in SEM as a single manifest variable, not so much a problem when they form a latent scale)
df_sbsa2_wide_pers_sa_mod <- df_sbsa2_wide_pers_sa_mod %>% 
  mutate_at(c(colnames(df_sbsa2_wide_pers_sa_mod)[-1]), ~(scale(.) %>% as.vector)) 
# colnames(df_sbsa2_wide_pers_sa_mod)

group_assign <- df_sbsa2 %>% select(pid, rando) %>% unique()

df_sbsa2_wide_pers_sa_mod <- df_sbsa2_wide_pers %>% left_join(group_assign) %>% 
  filter(rando=="Self-Acceptance") %>% select(-rando, -ends_with("_t3")) %>%
  left_join(df_sbsa2_wide_pers_sa_mod)

# follow-up, from T2 to T3
df_sbsa2_wide_pers_sa_mod_fu <- df_sbsa2 %>% 
  filter(rando=="Self-Acceptance" & time %in% c(1,2)) %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sa07", # facet-specific change goals -> asked at T1
                                  "sa04"))) %>% # frequency self-improvement behaviors -> asked at T2
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with(c("sa07", "sa04")))) %>% 
  select(-c(sa07_01_t2, sa07_02_t2, sa07_03_t2, sa07_04_t2, sa07_05_t2, 
            sa07_06_t2, sa07_07_t2, sa07_08_t2, sa07_09_t2, sa07_10_t2, 
            sa07_11_t2, sa07_12_t2, sa07_13_t2, sa07_14_t2, sa07_15_t2, 
            sa04_01_t1, sa04_02_t1, sa04_03_t1)) # frequency of self-improvement behaviors measured at T2
# standardize goal variables (better interpretation for when they are in SEM as a single manifest variable, not so much a problem when they form a latent scale)
df_sbsa2_wide_pers_sa_mod_fu <- df_sbsa2_wide_pers_sa_mod_fu %>% 
  mutate_at(c(colnames(df_sbsa2_wide_pers_sa_mod_fu)[-1]), ~(scale(.) %>% as.vector)) 
# colnames(df_sbsa2_wide_pers_sa_mod_fu)

df_sbsa2_wide_pers_sa_mod_fu <- df_sbsa2_wide_pers %>% left_join(group_assign) %>% 
  filter(rando=="Self-Acceptance" & !is.na(valid_t2)) %>% select(-rando, -ends_with("_t1")) %>%
  left_join(df_sbsa2_wide_pers_sa_mod_fu)

6.7.1 Big Five traits (run models)

Run models for all traits with a template & loop:

Show the code
# create templates:

# 1st, for facet-specific acceptance goals

trait_template_mod_goal_accept <- '
trait_t1 =~ 1*ind01_t1 + lamb2*ind02_t1 + lamb3*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

goals =~ 1*ind_goal_1 + ind_goal_2 + ind_goal_3 # latent variable for moderator

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t1 ~ 1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ trait_t1         # This estimates the variance of trait_t1 
trait_t1 ~~ d_trait_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
trait_t1 ~ goals           # This estimates the moderation effect on personality at T1
d_trait_1 ~ goals          # This estimates the moderation effect on the change score

goals ~ 0*1            # This fixes the intercept of the moderator to 0
goals ~~ goals         # This estimates the variance of the moderator

ind01_t1 ~~ ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ res1*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ res2*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ res3*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ res1*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ res3*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ m3*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

ind_goal_1 ~~ ind_goal_1
ind_goal_2 ~~ ind_goal_2
ind_goal_3 ~~ ind_goal_3

ind_goal_1 ~ 1
ind_goal_2 ~ 1
ind_goal_3 ~ 1
'

trait_facets_nrs <- list(a1 = c(1:3), b2 = c(4:6), c3 = c(7:9), d4 = c(10:12), e5 = c(13:15)) # matching facet nrs to traits 

# loop across 5 traits -> change in ideal personality
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal (6 = ideal)
  # items = paste0(bfi_versions[[6]], item_nrs) # using parcels instead!
  mod_names = paste0("sa07_", str_pad(trait_facets_nrs[[i]], 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(trait_template_mod_goal_accept, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3"),
                                         "ind_goal_1" = mod_names[1], "ind_goal_2" = mod_names[2], "ind_goal_3" = mod_names[3]))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp7")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp7")), trait_model_fit))
}  

# loop across 5 traits -> change in current personality
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal (6 = ideal)
  # items = paste0(bfi_versions[[6]], item_nrs) # using parcels instead!
  mod_names = paste0("sa07_", str_pad(trait_facets_nrs[[i]], 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(trait_template_mod_goal_accept, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), # current instead of ideal
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3"),
                                         "ind_goal_1" = mod_names[1], "ind_goal_2" = mod_names[2], "ind_goal_3" = mod_names[3]))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp7")), template_filled)) # current instead of ideal
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp7")), trait_model_fit))
}  

# we also need separate models for follow-up (fu), that is, changes from T2 to T3 (only for ideal personality ratings)

trait_template_mod_goal_accept_fu <- '
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for trait_t2 
trait_t3 =~ 1*ind01_t3 + lamb2*ind02_t3 + lamb3*ind03_t3 # This specifies the measurement model for trait_t3 with the equality constrained factor loadings

goals =~ 1*ind_goal_1 + ind_goal_2 + ind_goal_3 # latent variable for moderator

trait_t3 ~ 1*trait_t2     # This parameter regresses trait_t3 perfectly on trait_t2
d_trait_1 =~ 1*trait_t3   # This defines the latent change score factor as measured perfectly by scores on trait_t3
trait_t3 ~ 0*1            # This line constrains the intercept of trait_t3 to 0
trait_t3 ~~ 0*trait_t3    # This fixes the variance of trait_t3 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t2 ~ 1               # This estimates the intercept of trait_t2 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t2 ~~ trait_t2         # This estimates the variance of trait_t2 
trait_t2 ~~ d_trait_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
trait_t2 ~ goals           # This estimates the moderation effect on personality at T2
d_trait_1 ~ goals          # This estimates the moderation effect on the change score

goals ~ 0*1            # This fixes the intercept of the moderator to 0
goals ~~ goals         # This estimates the variance of the moderator

ind01_t2 ~~ ind01_t3   # This allows residual covariance on indicator X1 across T2 and T3
ind02_t2 ~~ ind02_t3   # This allows residual covariance on indicator X2 across T2 and T3
ind03_t2 ~~ ind03_t3   # This allows residual covariance on indicator X3 across T2 and T3

ind01_t2 ~~ res1*ind01_t2   # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2   # This allows residual variance on indicator X2 at T2
ind03_t2 ~~ res3*ind03_t2   # This allows residual variance on indicator X3 at T2

ind01_t3 ~~ res1*ind01_t3  # This allows residual variance on indicator X1 at T3 
ind02_t3 ~~ res2*ind02_t3  # This allows residual variance on indicator X2 at T3 
ind03_t3 ~~ res3*ind03_t3  # This allows residual variance on indicator X3 at T3

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

ind01_t3 ~ 0*1      # This constrains the intercept of X1 to 0 at T3
ind02_t3 ~ m2*1     # This estimates the intercept of X2 at T3
ind03_t3 ~ m3*1     # This estimates the intercept of X3 at T3

ind_goal_1 ~~ ind_goal_1
ind_goal_2 ~~ ind_goal_2
ind_goal_3 ~~ ind_goal_3

ind_goal_1 ~ 1
ind_goal_2 ~ 1
ind_goal_3 ~ 1
'

# loop across 5 traits -> change in ideal personality (from T2 to T3)
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal (6 = ideal)
  # items = paste0(bfi_versions[[6]], item_nrs) # using parcels instead!
  mod_names = paste0("sa07_", str_pad(trait_facets_nrs[[i]], 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(trait_template_mod_goal_accept_fu, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3"),
                                         "ind_goal_1" = mod_names[1], "ind_goal_2" = mod_names[2], "ind_goal_3" = mod_names[3]))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa_mod_fu, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp7_fu")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp7_fu")), trait_model_fit))
}  

# 2nd, for frequency of self-acceptance behavior

trait_template_mod_frequ_accept <- '
trait_t1 =~ 1*ind01_t1 + lamb2*ind02_t1 + lamb3*ind03_t1 # This specifies the measurement model for extra_t1 
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

frequ =~ 1*sa04_01_t2 + sa04_02_t2 + sa04_03_t2 # latent variable for moderator

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t1 ~ 1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ trait_t1         # This estimates the variance of trait_t1 
trait_t1 ~~ d_trait_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
trait_t1 ~ frequ           # This estimates the moderation effect on personality at T1
d_trait_1 ~ frequ          # This estimates the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

ind01_t1 ~~ ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ res1*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ res2*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ res3*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ res1*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ res3*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ m3*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa04_01_t2 ~~ sa04_01_t2
sa04_02_t2 ~~ sa04_02_t2
sa04_03_t2 ~~ sa04_03_t2

sa04_01_t2 ~ 1
sa04_02_t2 ~ 1
sa04_03_t2 ~ 1
'

# loop across 5 traits -> change in ideal personality
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  # items = paste0(bfi_versions[[6]], item_nrs) # using parcels instead!
  template_filled <- str_replace_all(trait_template_mod_frequ_accept, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp7")), template_filled)) 
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp7")), trait_model_fit))
}  

# loop across 5 traits -> change in current personality
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  # items = paste0(bfi_versions[[6]], item_nrs) # using parcels instead!
  template_filled <- str_replace_all(trait_template_mod_frequ_accept, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), # current instead of ideal
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp7")), template_filled)) # current instead of ideal
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp7")), trait_model_fit))
}  

# we also need separate models for follow-up (fu), that is, changes from T2 to T3 (only for current personality ratings)

trait_template_mod_frequ_accept_fu <- '
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for extra_t2 
trait_t3 =~ 1*ind01_t3 + lamb2*ind02_t3 + lamb3*ind03_t3 # This specifies the measurement model for extra_t3 with the equality constrained factor loadings

frequ =~ 1*sa04_01_t2 + sa04_02_t2 + sa04_03_t2 # latent variable for moderator

trait_t3 ~ 1*trait_t2     # This parameter regresses trait_t3 perfectly on trait_t2
d_trait_1 =~ 1*trait_t3   # This defines the latent change score factor as measured perfectly by scores on trait_t3
trait_t3 ~ 0*1            # This line constrains the intercept of trait_t3 to 0
trait_t3 ~~ 0*trait_t3    # This fixes the variance of trait_t3 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t2 ~ 1               # This estimates the intercept of trait_t2 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t2 ~~ trait_t2         # This estimates the variance of trait_t2 
trait_t2 ~~ d_trait_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
trait_t2 ~ frequ           # This estimates the moderation effect on personality at T2
d_trait_1 ~ frequ          # This estimates the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

ind01_t2 ~~ ind01_t3   # This allows residual covariance on indicator X1 across T2 and T3
ind02_t2 ~~ ind02_t3   # This allows residual covariance on indicator X2 across T2 and T3
ind03_t2 ~~ ind03_t3   # This allows residual covariance on indicator X3 across T2 and T3

ind01_t2 ~~ res1*ind01_t2   # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2   # This allows residual variance on indicator X2 at T2
ind03_t2 ~~ res3*ind03_t2   # This allows residual variance on indicator X3 at T2

ind01_t3 ~~ res1*ind01_t3  # This allows residual variance on indicator X1 at T3 
ind02_t3 ~~ res2*ind02_t3  # This allows residual variance on indicator X2 at T3 
ind03_t3 ~~ res3*ind03_t3  # This allows residual variance on indicator X3 at T3

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

ind01_t3 ~ 0*1      # This constrains the intercept of X1 to 0 at T3
ind02_t3 ~ m2*1     # This estimates the intercept of X2 at T3
ind03_t3 ~ m3*1     # This estimates the intercept of X3 at T3

sa04_01_t2 ~~ sa04_01_t2
sa04_02_t2 ~~ sa04_02_t2
sa04_03_t2 ~~ sa04_03_t2

sa04_01_t2 ~ 1
sa04_02_t2 ~ 1
sa04_03_t2 ~ 1
'

# loop across 5 traits -> change in ideal personality (from T2 to T3)
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  # items = paste0(bfi_versions[[6]], item_nrs) # using parcels instead!
  template_filled <- str_replace_all(trait_template_mod_frequ_accept_fu, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa_mod_fu, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp7_fu")), template_filled)) 
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp7_fu")), trait_model_fit))
}  

6.7.2 Big Five traits (ideal personality)

6.7.2.1 Extraversion: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5751.678 5850.923 0.995 0.018 0.041
# parameters of interest
params_lcs_extra_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_extra_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_extra_ideal_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ goals", "goals ~~ goals", "extra_t1 ~ goals", # acceptance goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
Joining with `by = join_by(term)`
kable(params_lcs_extra_ideal_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.984 NA NA 1.000 1.000
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.636 NA NA 1.000 1.000
d_extra_1 ~1 -0.020 -0.103 0.064 -0.076 -0.776 0.438 -0.069 0.030
extra_t1 ~1 3.689 3.582 3.796 9.175 113.322 0.000 3.625 3.753
d_extra_1 ~~ d_extra_1 0.067 -0.002 0.135 0.989 3.211 0.001 0.026 0.108
extra_t1 ~~ d_extra_1 -0.030 -0.072 0.012 -0.291 -2.370 0.018 -0.055 -0.005
extra_t1 ~ goals 0.064 -0.132 0.259 0.102 1.069 0.285 -0.053 0.180
d_extra_1 ~ goals -0.042 -0.201 0.118 -0.103 -0.859 0.390 -0.136 0.053
goals ~~ goals 0.413 0.062 0.764 1.000 3.874 0.000 0.204 0.622

The moderation effect of specific, facet-level acceptance goals with the extraversion change score (ideal-personality) is not significantly different from zero, b = -0.042, p = 0.39.

6.7.2.2 Extraversion: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5133.707 5232.952 0.988 0.031 0.043
# parameters of interest
params_lcs_extra_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_extra_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_extra_ideal_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ frequ", "frequ ~~ frequ", "extra_t1 ~ frequ", # frequency of self improvement
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
Joining with `by = join_by(term)`
kable(params_lcs_extra_ideal_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.987 NA NA 1.000 1.000
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.635 NA NA 1.000 1.000
d_extra_1 ~1 -0.019 -0.102 0.065 -0.072 -0.731 0.465 -0.068 0.031
extra_t1 ~1 3.689 3.581 3.796 9.238 113.309 0.000 3.625 3.752
d_extra_1 ~~ d_extra_1 0.066 -0.001 0.133 0.999 3.227 0.001 0.026 0.106
extra_t1 ~~ d_extra_1 -0.032 -0.072 0.009 -0.325 -2.588 0.010 -0.056 -0.008
extra_t1 ~ frequ 0.174 0.002 0.345 0.303 3.336 0.001 0.072 0.276
d_extra_1 ~ frequ 0.010 -0.133 0.152 0.026 0.224 0.823 -0.075 0.095
frequ ~~ frequ 0.485 0.220 0.749 1.000 6.023 0.000 0.327 0.642

The moderation effect of the frequency of self-acceptance behaviors with the extraversion change score (ideal-personality) is not significantly different from zero, b = 0.01, p = 0.823.

6.7.2.3 Agreeableness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5422.119 5521.364 0.989 0.038 0.04
# parameters of interest
params_lcs_agree_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_agree_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_agree_ideal_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ goals", "goals ~~ goals", "agree_t1 ~ goals", # acceptance goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
Joining with `by = join_by(term)`
kable(params_lcs_agree_ideal_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.013 NA NA 1.000 1.000
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.623 NA NA 1.000 1.000
d_agree_1 ~1 0.006 -0.067 0.079 0.021 0.259 0.795 -0.038 0.049
agree_t1 ~1 3.778 3.656 3.900 8.422 101.648 0.000 3.705 3.851
d_agree_1 ~~ d_agree_1 0.076 0.020 0.132 0.998 4.472 0.000 0.043 0.109
agree_t1 ~~ d_agree_1 -0.041 -0.083 0.000 -0.335 -3.264 0.001 -0.066 -0.016
agree_t1 ~ goals -0.072 -0.218 0.075 -0.106 -1.610 0.107 -0.159 0.016
d_agree_1 ~ goals -0.017 -0.151 0.118 -0.040 -0.410 0.682 -0.097 0.063
goals ~~ goals 0.441 0.179 0.703 1.000 5.539 0.000 0.285 0.597

The moderation effect of specific, facet-level acceptance goals with the agreeableness change score (ideal-personality) is not significantly different from zero, b = -0.017, p = 0.682.

6.7.2.4 Agreeableness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 4998.909 5098.154 0.993 0.029 0.036
# parameters of interest
params_lcs_agree_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_agree_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_agree_ideal_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ frequ", "frequ ~~ frequ", "agree_t1 ~ frequ", # frequency of self improvement
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
Joining with `by = join_by(term)`
kable(params_lcs_agree_ideal_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.012 NA NA 1.000 1.000
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.622 NA NA 1.000 1.000
d_agree_1 ~1 0.006 -0.066 0.079 0.023 0.293 0.770 -0.037 0.049
agree_t1 ~1 3.778 3.656 3.900 8.498 101.706 0.000 3.705 3.851
d_agree_1 ~~ d_agree_1 0.074 0.020 0.129 0.994 4.505 0.000 0.042 0.107
agree_t1 ~~ d_agree_1 -0.042 -0.084 0.000 -0.357 -3.254 0.001 -0.067 -0.017
agree_t1 ~ frequ 0.157 -0.006 0.321 0.245 3.163 0.002 0.060 0.255
d_agree_1 ~ frequ 0.031 -0.096 0.157 0.078 0.804 0.422 -0.044 0.106
frequ ~~ frequ 0.478 0.212 0.744 1.000 5.908 0.000 0.319 0.637

The moderation effect of the frequency of self-acceptance behaviors with the agreeableness change score (ideal-personality) is not significantly different from zero, b = 0.031, p = 0.422.

6.7.2.5 Conscientiousness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 4999.735 5098.98 1 0 0.03
# parameters of interest
params_lcs_consc_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_consc_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_consc_ideal_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ goals", "goals ~~ goals", "consc_t1 ~ goals", # acceptance goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
Joining with `by = join_by(term)`
kable(params_lcs_consc_ideal_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.034 NA NA 1.000 1.000
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.741 NA NA 1.000 1.000
d_consc_1 ~1 0.026 -0.051 0.103 0.081 1.097 0.273 -0.020 0.072
consc_t1 ~1 4.339 4.238 4.440 9.858 141.190 0.000 4.279 4.400
d_consc_1 ~~ d_consc_1 0.098 0.029 0.167 0.983 4.650 0.000 0.057 0.139
consc_t1 ~~ d_consc_1 -0.057 -0.105 -0.009 -0.412 -3.886 0.000 -0.085 -0.028
consc_t1 ~ goals -0.020 -0.149 0.109 -0.033 -0.504 0.615 -0.097 0.057
d_consc_1 ~ goals -0.056 -0.174 0.062 -0.132 -1.563 0.118 -0.127 0.014
goals ~~ goals 0.546 0.305 0.787 1.000 7.460 0.000 0.402 0.689

The moderation effect of specific, facet-level acceptance goals with the conscientiousness change score (ideal-personality) is not significantly different from zero, b = -0.056, p = 0.118.

6.7.2.6 Conscientiousness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 4584.839 4684.084 0.992 0.031 0.029
# parameters of interest
params_lcs_consc_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_consc_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_consc_ideal_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ frequ", "frequ ~~ frequ", "consc_t1 ~ frequ", # frequency of self improvement
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
Joining with `by = join_by(term)`
kable(params_lcs_consc_ideal_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.034 NA NA 1.000 1.000
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.740 NA NA 1.000 1.000
d_consc_1 ~1 0.027 -0.050 0.104 0.085 1.156 0.248 -0.019 0.073
consc_t1 ~1 4.339 4.238 4.440 9.838 141.177 0.000 4.279 4.400
d_consc_1 ~~ d_consc_1 0.098 0.029 0.167 0.983 4.667 0.000 0.057 0.139
consc_t1 ~~ d_consc_1 -0.059 -0.107 -0.011 -0.431 -4.059 0.000 -0.087 -0.030
consc_t1 ~ frequ 0.095 -0.079 0.268 0.148 1.801 0.072 -0.008 0.198
d_consc_1 ~ frequ 0.060 -0.064 0.185 0.131 1.595 0.111 -0.014 0.134
frequ ~~ frequ 0.474 0.209 0.739 1.000 5.879 0.000 0.316 0.632

The moderation effect of the frequency of self-acceptance behaviors with the conscientiousness change score (ideal-personality) is not significantly different from zero, b = 0.06, p = 0.111.

6.7.2.7 Neuroticism: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5244.678 5343.923 0.99 0.034 0.045
# parameters of interest
params_lcs_neuro_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_neuro_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_neuro_ideal_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ goals", "goals ~~ goals", "neuro_t1 ~ goals", # acceptance goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
Joining with `by = join_by(term)`
kable(params_lcs_neuro_ideal_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.066 NA NA 1.000 1.000
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.699 NA NA 1.000 1.000
d_neuro_1 ~1 -0.007 -0.100 0.087 -0.019 -0.231 0.817 -0.062 0.049
neuro_t1 ~1 1.751 1.640 1.863 3.280 51.766 0.000 1.685 1.818
d_neuro_1 ~~ d_neuro_1 0.122 0.023 0.222 0.999 4.048 0.000 0.063 0.181
neuro_t1 ~~ d_neuro_1 -0.078 -0.157 0.001 -0.419 -3.240 0.001 -0.125 -0.031
neuro_t1 ~ goals 0.051 -0.118 0.220 0.064 0.995 0.320 -0.050 0.152
d_neuro_1 ~ goals -0.014 -0.158 0.129 -0.027 -0.330 0.741 -0.100 0.071
goals ~~ goals 0.448 0.196 0.699 1.000 5.852 0.000 0.298 0.598

The moderation effect of specific, facet-level acceptance goals with the neuroticism change score (ideal-personality) is not significantly different from zero, b = -0.014, p = 0.741.

6.7.2.8 Neuroticism: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 4801.645 4900.89 0.997 0.019 0.036
# parameters of interest
params_lcs_neuro_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_neuro_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_neuro_ideal_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ frequ", "frequ ~~ frequ", "neuro_t1 ~ frequ", # frequency of self improvement
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
Joining with `by = join_by(term)`
kable(params_lcs_neuro_ideal_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.065 NA NA 1.000 1.000
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.698 NA NA 1.000 1.000
d_neuro_1 ~1 -0.006 -0.100 0.088 -0.018 -0.227 0.821 -0.062 0.050
neuro_t1 ~1 1.751 1.640 1.863 3.263 51.737 0.000 1.685 1.818
d_neuro_1 ~~ d_neuro_1 0.123 0.023 0.223 0.997 4.060 0.000 0.064 0.183
neuro_t1 ~~ d_neuro_1 -0.077 -0.154 0.001 -0.416 -3.268 0.001 -0.123 -0.031
neuro_t1 ~ frequ -0.161 -0.362 0.039 -0.209 -2.644 0.008 -0.281 -0.042
d_neuro_1 ~ frequ 0.029 -0.137 0.194 0.057 0.570 0.569 -0.070 0.127
frequ ~~ frequ 0.482 0.215 0.749 1.000 5.940 0.000 0.323 0.641

The moderation effect of the frequency of self-acceptance behaviors with the neuroticism change score (ideal-personality) is not significantly different from zero, b = 0.029, p = 0.569.

6.7.2.9 Openness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5298.605 5397.85 0.989 0.037 0.033
# parameters of interest
params_lcs_openn_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_openn_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_openn_ideal_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ goals", "goals ~~ goals", "openn_t1 ~ goals", # acceptance goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
Joining with `by = join_by(term)`
kable(params_lcs_openn_ideal_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.048 NA NA 1.000 1.000
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.730 NA NA 1.000 1.000
d_openn_1 ~1 0.014 -0.040 0.069 0.068 0.876 0.381 -0.018 0.047
openn_t1 ~1 3.907 3.808 4.006 12.686 130.383 0.000 3.848 3.966
d_openn_1 ~~ d_openn_1 0.046 0.002 0.090 0.995 3.427 0.001 0.020 0.072
openn_t1 ~~ d_openn_1 -0.025 -0.053 0.002 -0.416 -3.024 0.002 -0.042 -0.009
openn_t1 ~ goals -0.193 -0.325 -0.062 -0.370 -4.840 0.000 -0.272 -0.115
d_openn_1 ~ goals 0.027 -0.066 0.120 0.073 0.946 0.344 -0.029 0.082
goals ~~ goals 0.347 0.138 0.555 1.000 5.457 0.000 0.222 0.471

The moderation effect of specific, facet-level acceptance goals with the openness change score (ideal-personality) is not significantly different from zero, b = 0.027, p = 0.344.

6.7.2.10 Openness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5076.784 5176.029 0.991 0.03 0.038
# parameters of interest
params_lcs_openn_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_openn_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_openn_ideal_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ frequ", "frequ ~~ frequ", "openn_t1 ~ frequ", # frequency of self improvement
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
Joining with `by = join_by(term)`
kable(params_lcs_openn_ideal_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.047 NA NA 1.000 1.000
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.731 NA NA 1.000 1.000
d_openn_1 ~1 0.015 -0.040 0.070 0.069 0.901 0.368 -0.018 0.048
openn_t1 ~1 3.907 3.808 4.006 12.636 130.274 0.000 3.848 3.966
d_openn_1 ~~ d_openn_1 0.047 0.002 0.091 0.999 3.444 0.001 0.020 0.073
openn_t1 ~~ d_openn_1 -0.028 -0.059 0.003 -0.421 -2.975 0.003 -0.046 -0.009
openn_t1 ~ frequ 0.063 -0.048 0.174 0.142 1.878 0.060 -0.003 0.129
d_openn_1 ~ frequ 0.010 -0.081 0.101 0.032 0.362 0.717 -0.044 0.064
frequ ~~ frequ 0.481 0.216 0.746 1.000 5.968 0.000 0.323 0.638

The moderation effect of frequency of self-acceptance behaviors with the openness change score (ideal-personality) is not significantly different from zero, b = 0.01, p = 0.717.

6.7.3 Big Five traits (ideal personality - follow-up at T3)

6.7.3.1 Extraversion: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 26 4899.195 4994.068 1 0 0.035
# parameters of interest
params_lcs_extra_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_extra_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_extra_ideal_specif_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("extra_t3 ~ extra_t2", "d_extra_1 =~ extra_t3", "extra_t2 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ goals", "goals ~~ goals", "extra_t2 ~ goals", # acceptance goals
                           "d_extra_1 ~1 ", "extra_t2 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
Joining with `by = join_by(term)`
kable(params_lcs_extra_ideal_specif_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
extra_t3 ~ extra_t2 1.000 1.000 1.000 1.033 NA NA 1.000 1.000
d_extra_1 =~ extra_t3 1.000 1.000 1.000 0.539 NA NA 1.000 1.000
d_extra_1 ~1 -0.007 -0.085 0.071 -0.032 -0.292 0.770 -0.053 0.039
extra_t2 ~1 3.650 3.527 3.773 8.950 97.362 0.000 3.577 3.724
d_extra_1 ~~ d_extra_1 0.045 -0.008 0.097 0.983 2.791 0.005 0.013 0.076
extra_t2 ~~ d_extra_1 -0.028 -0.076 0.020 -0.328 -1.940 0.052 -0.057 0.000
extra_t2 ~ goals 0.020 -0.180 0.219 0.031 0.326 0.744 -0.099 0.139
d_extra_1 ~ goals 0.044 -0.129 0.217 0.132 0.836 0.403 -0.059 0.147
goals ~~ goals 0.407 0.025 0.788 1.000 3.508 0.000 0.179 0.634

The moderation effect of specific, facet-level acceptance goals with the extraversion change score from T2 to T3 (ideal-personality) is not significantly different from zero, b = 0.044, p = 0.403.

6.7.3.2 Extraversion: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 26 4690.649 4785.522 0.994 0.023 0.039
# parameters of interest
params_lcs_extra_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_extra_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_extra_ideal_frequ_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("extra_t3 ~ extra_t2", "d_extra_1 =~ extra_t3", "extra_t2 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ frequ", "frequ ~~ frequ", "extra_t2 ~ frequ", # frequency of self improvement
                           "d_extra_1 ~1 ", "extra_t2 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
Joining with `by = join_by(term)`
kable(params_lcs_extra_ideal_frequ_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
extra_t3 ~ extra_t2 1.000 1.000 1.000 1.030 NA NA 1.000 1.000
d_extra_1 =~ extra_t3 1.000 1.000 1.000 0.542 NA NA 1.000 1.000
d_extra_1 ~1 -0.007 -0.084 0.069 -0.035 -0.321 0.749 -0.053 0.038
extra_t2 ~1 3.650 3.527 3.773 9.117 97.559 0.000 3.577 3.724
d_extra_1 ~~ d_extra_1 0.044 -0.007 0.095 0.993 2.819 0.005 0.013 0.075
extra_t2 ~~ d_extra_1 -0.025 -0.069 0.020 -0.308 -1.813 0.070 -0.051 0.002
extra_t2 ~ frequ 0.182 0.012 0.352 0.314 3.518 0.000 0.080 0.283
d_extra_1 ~ frequ -0.025 -0.149 0.098 -0.083 -0.675 0.500 -0.099 0.048
frequ ~~ frequ 0.479 0.216 0.741 1.000 5.999 0.000 0.322 0.635

The moderation effect of the frequency of self-acceptance behaviors with the extraversion change score from T2 to T3 (ideal-personality) is not significantly different from zero, b = -0.025, p = 0.5.

6.7.3.3 Agreeableness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 26 4470.297 4565.171 0.997 0.022 0.037
# parameters of interest
params_lcs_agree_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_agree_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_agree_ideal_specif_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("agree_t3 ~ agree_t2", "d_agree_1 =~ agree_t3", "agree_t2 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ goals", "goals ~~ goals", "agree_t2 ~ goals", # acceptance goals
                           "d_agree_1 ~1 ", "agree_t2 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
Joining with `by = join_by(term)`
kable(params_lcs_agree_ideal_specif_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
agree_t3 ~ agree_t2 1.000 1.000 1.000 1.026 NA NA 1.000 1.000
d_agree_1 =~ agree_t3 1.000 1.000 1.000 0.480 NA NA 1.000 1.000
d_agree_1 ~1 -0.001 -0.070 0.067 -0.005 -0.058 0.954 -0.042 0.040
agree_t2 ~1 3.814 3.684 3.945 8.043 96.133 0.000 3.736 3.892
d_agree_1 ~~ d_agree_1 0.049 -0.008 0.106 0.989 2.808 0.005 0.015 0.083
agree_t2 ~~ d_agree_1 -0.028 -0.068 0.011 -0.274 -2.359 0.018 -0.052 -0.005
agree_t2 ~ goals -0.125 -0.301 0.051 -0.176 -2.337 0.019 -0.229 -0.020
d_agree_1 ~ goals 0.035 -0.079 0.149 0.104 0.998 0.318 -0.033 0.103
goals ~~ goals 0.445 0.161 0.729 1.000 5.155 0.000 0.276 0.614

The moderation effect of specific, facet-level acceptance goals with the agreeableness change score from T2 to T3 (ideal-personality) is not significantly different from zero, b = 0.035, p = 0.318.

6.7.3.4 Agreeableness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 26 4457.619 4552.492 0.995 0.027 0.036
# parameters of interest
params_lcs_agree_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_agree_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_agree_ideal_frequ_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("agree_t3 ~ agree_t2", "d_agree_1 =~ agree_t3", "agree_t2 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ frequ", "frequ ~~ frequ", "agree_t2 ~ frequ", # frequency of self improvement
                           "d_agree_1 ~1 ", "agree_t2 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
Joining with `by = join_by(term)`
kable(params_lcs_agree_ideal_frequ_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
agree_t3 ~ agree_t2 1.000 1.000 1.000 1.026 NA NA 1.000 1.000
d_agree_1 =~ agree_t3 1.000 1.000 1.000 0.481 NA NA 1.000 1.000
d_agree_1 ~1 -0.002 -0.070 0.067 -0.007 -0.074 0.941 -0.042 0.039
agree_t2 ~1 3.814 3.684 3.945 8.124 96.192 0.000 3.736 3.892
d_agree_1 ~~ d_agree_1 0.046 -0.008 0.100 0.954 2.791 0.005 0.014 0.078
agree_t2 ~~ d_agree_1 -0.023 -0.062 0.015 -0.241 -2.002 0.045 -0.046 0.000
agree_t2 ~ frequ 0.195 0.035 0.355 0.287 4.018 0.000 0.100 0.290
d_agree_1 ~ frequ -0.069 -0.182 0.045 -0.215 -1.993 0.046 -0.136 -0.001
frequ ~~ frequ 0.477 0.213 0.742 1.000 5.933 0.000 0.320 0.635

The moderation effect of the frequency of self-acceptance behaviors with the agreeableness change score from T2 to T3 (ideal-personality) is not significantly different from zero, b = -0.069, p = 0.046.

6.7.3.5 Conscientiousness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 26 4117.041 4211.914 0.978 0.056 0.038
# parameters of interest
params_lcs_consc_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_consc_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_consc_ideal_specif_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("consc_t3 ~ consc_t2", "d_consc_1 =~ consc_t3", "consc_t2 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ goals", "goals ~~ goals", "consc_t2 ~ goals", # acceptance goals
                           "d_consc_1 ~1 ", "consc_t2 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
Joining with `by = join_by(term)`
kable(params_lcs_consc_ideal_specif_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
consc_t3 ~ consc_t2 1.000 1.000 1.000 0.942 NA NA 1.000 1.000
d_consc_1 =~ consc_t3 1.000 1.000 1.000 0.476 NA NA 1.000 1.000
d_consc_1 ~1 -0.014 -0.085 0.058 -0.059 -0.629 0.529 -0.056 0.029
consc_t2 ~1 4.365 4.251 4.479 9.629 126.254 0.000 4.297 4.433
d_consc_1 ~~ d_consc_1 0.052 -0.002 0.107 0.999 3.187 0.001 0.020 0.085
consc_t2 ~~ d_consc_1 -0.013 -0.057 0.031 -0.125 -0.961 0.337 -0.039 0.013
consc_t2 ~ goals -0.081 -0.224 0.063 -0.131 -1.850 0.064 -0.166 0.005
d_consc_1 ~ goals 0.008 -0.109 0.125 0.025 0.220 0.826 -0.062 0.078
goals ~~ goals 0.541 0.279 0.802 1.000 6.797 0.000 0.385 0.697

The moderation effect of specific, facet-level acceptance goals with the conscientiousness change score from T2 to T3 (ideal-personality) is not significantly different from zero, b = 0.008, p = 0.826.

6.7.3.6 Conscientiousness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 26 4082.852 4177.726 0.973 0.062 0.039
# parameters of interest
params_lcs_consc_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_consc_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_consc_ideal_frequ_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("consc_t3 ~ consc_t2", "d_consc_1 =~ consc_t3", "consc_t2 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ frequ", "frequ ~~ frequ", "consc_t2 ~ frequ", # frequency of self improvement
                           "d_consc_1 ~1 ", "consc_t2 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
Joining with `by = join_by(term)`
kable(params_lcs_consc_ideal_frequ_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
consc_t3 ~ consc_t2 1.000 1.000 1.000 0.940 NA NA 1.000 1.000
d_consc_1 =~ consc_t3 1.000 1.000 1.000 0.474 NA NA 1.000 1.000
d_consc_1 ~1 -0.015 -0.086 0.057 -0.064 -0.674 0.500 -0.057 0.028
consc_t2 ~1 4.365 4.251 4.479 9.605 126.263 0.000 4.297 4.433
d_consc_1 ~~ d_consc_1 0.049 -0.003 0.101 0.939 3.113 0.002 0.018 0.080
consc_t2 ~~ d_consc_1 -0.006 -0.051 0.039 -0.062 -0.441 0.659 -0.033 0.021
consc_t2 ~ frequ 0.169 -0.010 0.347 0.255 3.110 0.002 0.062 0.275
d_consc_1 ~ frequ -0.082 -0.202 0.038 -0.247 -2.256 0.024 -0.154 -0.011
frequ ~~ frequ 0.473 0.209 0.738 1.000 5.897 0.000 0.316 0.631

The moderation effect of the frequency of self-acceptance behaviors with the conscientiousness change score from T2 to T3 (ideal-personality) is not significantly different from zero, b = -0.082, p = 0.024.

6.7.3.7 Neuroticism: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 26 4443.133 4538.007 0.993 0.028 0.034
# parameters of interest
params_lcs_neuro_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_neuro_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_neuro_ideal_specif_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("neuro_t3 ~ neuro_t2", "d_neuro_1 =~ neuro_t3", "neuro_t2 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ goals", "goals ~~ goals", "neuro_t2 ~ goals", # acceptance goals
                           "d_neuro_1 ~1 ", "neuro_t2 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
Joining with `by = join_by(term)`
kable(params_lcs_neuro_ideal_specif_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
neuro_t3 ~ neuro_t2 1.000 1.000 1.000 0.992 NA NA 1.000 1.000
d_neuro_1 =~ neuro_t3 1.000 1.000 1.000 0.476 NA NA 1.000 1.000
d_neuro_1 ~1 0.023 -0.061 0.107 0.097 0.896 0.370 -0.027 0.073
neuro_t2 ~1 1.747 1.628 1.867 3.531 48.088 0.000 1.676 1.819
d_neuro_1 ~~ d_neuro_1 0.056 -0.019 0.132 1.000 2.452 0.014 0.011 0.101
neuro_t2 ~~ d_neuro_1 -0.026 -0.081 0.028 -0.224 -1.588 0.112 -0.059 0.006
neuro_t2 ~ goals 0.039 -0.128 0.205 0.050 0.769 0.442 -0.060 0.138
d_neuro_1 ~ goals 0.005 -0.129 0.139 0.014 0.128 0.898 -0.075 0.085
goals ~~ goals 0.408 0.136 0.680 1.000 4.932 0.000 0.246 0.570

The moderation effect of specific, facet-level acceptance goals with the neuroticism change score from T2 to T3 (ideal-personality) is not significantly different from zero, b = 0.005, p = 0.898.

6.7.3.8 Neuroticism: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 26 4388.419 4483.292 0.992 0.03 0.032
# parameters of interest
params_lcs_neuro_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_neuro_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_neuro_ideal_frequ_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("neuro_t3 ~ neuro_t2", "d_neuro_1 =~ neuro_t3", "neuro_t2 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ frequ", "frequ ~~ frequ", "neuro_t2 ~ frequ", # frequency of self improvement
                           "d_neuro_1 ~1 ", "neuro_t2 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
Joining with `by = join_by(term)`
kable(params_lcs_neuro_ideal_frequ_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
neuro_t3 ~ neuro_t2 1.000 1.000 1.000 0.991 NA NA 1.000 1.000
d_neuro_1 =~ neuro_t3 1.000 1.000 1.000 0.476 NA NA 1.000 1.000
d_neuro_1 ~1 0.024 -0.061 0.109 0.101 0.926 0.354 -0.027 0.075
neuro_t2 ~1 1.747 1.628 1.867 3.514 48.024 0.000 1.676 1.819
d_neuro_1 ~~ d_neuro_1 0.053 -0.022 0.128 0.926 2.307 0.021 0.008 0.098
neuro_t2 ~~ d_neuro_1 -0.021 -0.075 0.033 -0.184 -1.265 0.206 -0.053 0.011
neuro_t2 ~ frequ -0.125 -0.299 0.048 -0.174 -2.377 0.017 -0.229 -0.022
d_neuro_1 ~ frequ 0.094 -0.044 0.232 0.272 2.237 0.025 0.012 0.176
frequ ~~ frequ 0.475 0.212 0.739 1.000 5.941 0.000 0.318 0.632

The moderation effect of the frequency of self-acceptance behaviors with the neuroticism change score from T2 to T3 (ideal-personality) is not significantly different from zero (at p < .001), b = 0.094, p = 0.025.

6.7.3.9 Openness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 26 4531.988 4626.861 1 0 0.027
# parameters of interest
params_lcs_openn_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_openn_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_openn_ideal_specif_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("openn_t3 ~ openn_t2", "d_openn_1 =~ openn_t3", "openn_t2 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ goals", "goals ~~ goals", "openn_t2 ~ goals", # acceptance goals
                           "d_openn_1 ~1 ", "openn_t2 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
Joining with `by = join_by(term)`
kable(params_lcs_openn_ideal_specif_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
openn_t3 ~ openn_t2 1.000 1.000 1.000 0.948 NA NA 1.000 1.000
d_openn_1 =~ openn_t3 1.000 1.000 1.000 0.565 NA NA 1.000 1.000
d_openn_1 ~1 0.005 -0.045 0.054 0.030 0.316 0.752 -0.025 0.034
openn_t2 ~1 3.856 3.753 3.960 14.493 122.448 0.000 3.795 3.918
d_openn_1 ~~ d_openn_1 0.025 -0.005 0.055 1.000 2.786 0.005 0.007 0.043
openn_t2 ~~ d_openn_1 -0.009 -0.029 0.011 -0.215 -1.401 0.161 -0.020 0.003
openn_t2 ~ goals -0.155 -0.268 -0.042 -0.343 -4.497 0.000 -0.222 -0.087
d_openn_1 ~ goals 0.001 -0.083 0.085 0.004 0.044 0.965 -0.049 0.051
goals ~~ goals 0.348 0.118 0.579 1.000 4.971 0.000 0.211 0.486

The moderation effect of specific, facet-level acceptance goals with the openness change score from T2 to T3 (ideal-personality) is not significantly different from zero, b = 0.001, p = 0.965.

6.7.3.10 Openness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 26 4655.339 4750.212 1 0.005 0.035
# parameters of interest
params_lcs_openn_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_openn_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_openn_ideal_frequ_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("openn_t3 ~ openn_t2", "d_openn_1 =~ openn_t3", "openn_t2 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ frequ", "frequ ~~ frequ", "openn_t2 ~ frequ", # frequency of self improvement
                           "d_openn_1 ~1 ", "openn_t2 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
Joining with `by = join_by(term)`
kable(params_lcs_openn_ideal_frequ_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
openn_t3 ~ openn_t2 1.000 1.000 1.000 0.949 NA NA 1.000 1.000
d_openn_1 =~ openn_t3 1.000 1.000 1.000 0.569 NA NA 1.000 1.000
d_openn_1 ~1 0.005 -0.046 0.055 0.030 0.313 0.755 -0.025 0.035
openn_t2 ~1 3.856 3.753 3.960 14.314 122.309 0.000 3.795 3.918
d_openn_1 ~~ d_openn_1 0.026 -0.005 0.057 1.000 2.794 0.005 0.008 0.044
openn_t2 ~~ d_openn_1 -0.009 -0.031 0.013 -0.214 -1.367 0.172 -0.022 0.004
openn_t2 ~ frequ 0.070 -0.026 0.165 0.179 2.389 0.017 0.013 0.127
d_openn_1 ~ frequ 0.003 -0.073 0.079 0.014 0.143 0.886 -0.042 0.049
frequ ~~ frequ 0.480 0.216 0.745 1.000 5.981 0.000 0.323 0.638

The moderation effect of frequency of self-acceptance behaviors with the openness change score from T2 to T3 (ideal-personality) is not significantly different from zero, b = 0.003, p = 0.886.

6.7.4 Big Five traits (current personality)

6.7.4.1 Extraversion: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 6203.425 6302.67 0.974 0.062 0.043
# parameters of interest
params_lcs_extra_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_extra_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_extra_curr_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ goals", "goals ~~ goals", "extra_t1 ~ goals", # acceptance goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
Joining with `by = join_by(term)`
kable(params_lcs_extra_curr_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.027 NA NA 1.000 1.000
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.451 NA NA 1.000 1.000
d_extra_1 ~1 0.092 0.017 0.168 0.345 4.018 0.000 0.047 0.137
extra_t1 ~1 3.030 2.883 3.178 4.972 67.579 0.000 2.942 3.118
d_extra_1 ~~ d_extra_1 0.070 0.011 0.130 0.981 3.915 0.000 0.035 0.106
extra_t1 ~~ d_extra_1 -0.031 -0.074 0.011 -0.248 -2.430 0.015 -0.057 -0.006
extra_t1 ~ goals -0.528 -0.833 -0.223 -0.620 -5.703 0.000 -0.710 -0.347
d_extra_1 ~ goals 0.052 -0.095 0.199 0.139 1.166 0.244 -0.035 0.139
goals ~~ goals 0.512 0.202 0.823 1.000 5.431 0.000 0.327 0.697

The moderation effect of specific, facet-level acceptance goals with the extraversion change score (current-personality) is not significantly different from zero, b = 0.052, p = 0.244.

6.7.4.2 Extraversion: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5677.102 5776.347 0.994 0.03 0.034
# parameters of interest
params_lcs_extra_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_extra_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_extra_curr_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ frequ", "frequ ~~ frequ", "extra_t1 ~ frequ", # frequency of self improvement
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
Joining with `by = join_by(term)`
kable(params_lcs_extra_curr_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.026 NA NA 1.000 1.000
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.450 NA NA 1.000 1.000
d_extra_1 ~1 0.089 0.015 0.163 0.342 3.955 0.000 0.045 0.133
extra_t1 ~1 3.032 2.885 3.179 5.096 67.775 0.000 2.944 3.119
d_extra_1 ~~ d_extra_1 0.067 0.011 0.123 0.988 3.931 0.000 0.034 0.101
extra_t1 ~~ d_extra_1 -0.044 -0.091 0.003 -0.287 -3.098 0.002 -0.072 -0.016
extra_t1 ~ frequ 0.067 -0.168 0.303 0.078 0.938 0.348 -0.073 0.208
d_extra_1 ~ frequ 0.041 -0.091 0.173 0.108 1.014 0.310 -0.038 0.119
frequ ~~ frequ 0.477 0.211 0.743 1.000 5.893 0.000 0.318 0.635

The moderation effect of the frequency of self-acceptance behaviors with the extraversion change score (current-personality) is not significantly different from zero, b = 0.041, p = 0.31.

6.7.4.3 Agreeableness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5398.923 5498.168 0.988 0.037 0.029
# parameters of interest
params_lcs_agree_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_agree_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_agree_curr_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ goals", "goals ~~ goals", "agree_t1 ~ goals", # acceptance goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
Joining with `by = join_by(term)`
kable(params_lcs_agree_curr_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
agree_t2 ~ agree_t1 1.000 1.000 1.000 0.967 NA NA 1.000 1.000
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.524 NA NA 1.000 1.000
d_agree_1 ~1 0.024 -0.034 0.083 0.120 1.357 0.175 -0.011 0.059
agree_t1 ~1 3.462 3.356 3.567 9.309 107.614 0.000 3.398 3.525
d_agree_1 ~~ d_agree_1 0.039 -0.007 0.086 0.973 2.792 0.005 0.012 0.067
agree_t1 ~~ d_agree_1 -0.019 -0.050 0.012 -0.272 -2.011 0.044 -0.038 0.000
agree_t1 ~ goals -0.164 -0.314 -0.013 -0.298 -3.580 0.000 -0.253 -0.074
d_agree_1 ~ goals -0.048 -0.161 0.064 -0.163 -1.425 0.154 -0.115 0.018
goals ~~ goals 0.459 0.230 0.688 1.000 6.591 0.000 0.322 0.595

The moderation effect of specific, facet-level acceptance goals with the agreeableness change score (current-personality) is not significantly different from zero, b = -0.048, p = 0.154.

6.7.4.4 Agreeableness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5020.378 5119.623 0.995 0.024 0.041
# parameters of interest
params_lcs_agree_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_agree_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_agree_curr_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ frequ", "frequ ~~ frequ", "agree_t1 ~ frequ", # frequency of self improvement
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
Joining with `by = join_by(term)`
kable(params_lcs_agree_curr_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
agree_t2 ~ agree_t1 1.000 1.000 1.000 0.963 NA NA 1.000 1.000
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.522 NA NA 1.000 1.000
d_agree_1 ~1 0.027 -0.033 0.086 0.129 1.463 0.144 -0.009 0.062
agree_t1 ~1 3.461 3.355 3.567 9.130 107.741 0.000 3.398 3.524
d_agree_1 ~~ d_agree_1 0.042 -0.013 0.096 0.988 2.523 0.012 0.009 0.074
agree_t1 ~~ d_agree_1 -0.016 -0.047 0.014 -0.211 -1.752 0.080 -0.034 0.002
agree_t1 ~ frequ 0.050 -0.097 0.197 0.090 1.112 0.266 -0.038 0.137
d_agree_1 ~ frequ 0.032 -0.075 0.139 0.109 0.992 0.321 -0.032 0.096
frequ ~~ frequ 0.476 0.213 0.739 1.000 5.949 0.000 0.319 0.633

The moderation effect of the frequency of self-acceptance behaviors with the agreeableness change score (current-personality) is not significantly different from zero, b = 0.032, p = 0.321.

6.7.4.5 Conscientiousness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5561.201 5660.446 0.98 0.064 0.028
# parameters of interest
params_lcs_consc_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_consc_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_consc_curr_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ goals", "goals ~~ goals", "consc_t1 ~ goals", # acceptance goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
Joining with `by = join_by(term)`
kable(params_lcs_consc_curr_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
consc_t2 ~ consc_t1 1.000 1.000 1.000 0.983 NA NA 1.000 1.000
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.512 NA NA 1.000 1.000
d_consc_1 ~1 0.074 -0.011 0.158 0.212 2.878 0.004 0.024 0.124
consc_t1 ~1 3.380 3.244 3.516 5.053 81.588 0.000 3.299 3.461
d_consc_1 ~~ d_consc_1 0.120 0.053 0.187 0.992 5.874 0.000 0.080 0.160
consc_t1 ~~ d_consc_1 -0.039 -0.090 0.011 -0.220 -2.543 0.011 -0.069 -0.009
consc_t1 ~ goals -0.559 -0.760 -0.358 -0.644 -9.162 0.000 -0.679 -0.439
d_consc_1 ~ goals 0.042 -0.078 0.161 0.092 1.143 0.253 -0.030 0.113
goals ~~ goals 0.594 0.369 0.818 1.000 8.696 0.000 0.460 0.727

The moderation effect of specific, facet-level acceptance goals with the conscientiousness change score (current-personality) is not significantly different from zero, b = 0.042, p = 0.253.

6.7.4.6 Conscientiousness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5266.96 5366.205 0.998 0.018 0.03
# parameters of interest
params_lcs_consc_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_consc_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_consc_curr_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ frequ", "frequ ~~ frequ", "consc_t1 ~ frequ", # frequency of self improvement
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
Joining with `by = join_by(term)`
kable(params_lcs_consc_curr_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
consc_t2 ~ consc_t1 1.000 1.000 1.000 0.984 NA NA 1.000 1.000
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.512 NA NA 1.000 1.000
d_consc_1 ~1 0.074 -0.010 0.159 0.213 2.886 0.004 0.024 0.125
consc_t1 ~1 3.380 3.244 3.516 5.054 81.596 0.000 3.299 3.461
d_consc_1 ~~ d_consc_1 0.121 0.051 0.190 0.997 5.702 0.000 0.079 0.162
consc_t1 ~~ d_consc_1 -0.055 -0.109 -0.001 -0.239 -3.356 0.001 -0.087 -0.023
consc_t1 ~ frequ 0.136 -0.121 0.394 0.141 1.743 0.081 -0.017 0.290
d_consc_1 ~ frequ 0.029 -0.105 0.163 0.057 0.709 0.478 -0.051 0.109
frequ ~~ frequ 0.476 0.210 0.742 1.000 5.879 0.000 0.317 0.635

The moderation effect of the frequency of self-acceptance behaviors with the conscientiousness change score (current-personality) is not significantly different from zero, b = 0.029, p = 0.478.

6.7.4.7 Neuroticism: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5836.258 5935.503 0.992 0.042 0.029
# parameters of interest
params_lcs_neuro_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_neuro_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_neuro_curr_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ goals", "goals ~~ goals", "neuro_t1 ~ goals", # acceptance goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
Joining with `by = join_by(term)`
kable(params_lcs_neuro_curr_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.990 NA NA 1.000 1.000
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.462 NA NA 1.000 1.000
d_neuro_1 ~1 -0.176 -0.268 -0.085 -0.474 -6.338 0.000 -0.231 -0.122
neuro_t1 ~1 3.250 3.095 3.405 4.077 68.940 0.000 3.157 3.342
d_neuro_1 ~~ d_neuro_1 0.138 0.061 0.216 1.000 5.905 0.000 0.093 0.184
neuro_t1 ~~ d_neuro_1 -0.060 -0.128 0.008 -0.237 -2.921 0.003 -0.101 -0.020
neuro_t1 ~ goals 0.597 0.331 0.863 0.517 7.384 0.000 0.439 0.756
d_neuro_1 ~ goals -0.010 -0.156 0.136 -0.018 -0.222 0.824 -0.097 0.077
goals ~~ goals 0.476 0.257 0.694 1.000 7.172 0.000 0.346 0.606

The moderation effect of specific, facet-level acceptance goals with the neuroticism change score (current-personality) is not significantly different from zero, b = -0.01, p = 0.824.

6.7.4.8 Neuroticism: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5473.66 5572.905 1 0 0.04
# parameters of interest
params_lcs_neuro_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_neuro_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_neuro_curr_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ frequ", "frequ ~~ frequ", "neuro_t1 ~ frequ", # frequency of self improvement
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
Joining with `by = join_by(term)`
kable(params_lcs_neuro_curr_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.990 NA NA 1.000 1.000
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.463 NA NA 1.000 1.000
d_neuro_1 ~1 -0.176 -0.269 -0.084 -0.472 -6.296 0.000 -0.231 -0.121
neuro_t1 ~1 3.250 3.095 3.405 4.066 68.947 0.000 3.158 3.342
d_neuro_1 ~~ d_neuro_1 0.133 0.056 0.210 0.951 5.663 0.000 0.087 0.179
neuro_t1 ~~ d_neuro_1 -0.057 -0.127 0.013 -0.197 -2.676 0.007 -0.099 -0.015
neuro_t1 ~ frequ 0.114 -0.142 0.370 0.100 1.466 0.143 -0.038 0.267
d_neuro_1 ~ frequ -0.118 -0.282 0.046 -0.221 -2.369 0.018 -0.215 -0.020
frequ ~~ frequ 0.489 0.221 0.757 1.000 5.993 0.000 0.329 0.649

The moderation effect of the frequency of self-acceptance behaviors with the neuroticism change score (current-personality) is not significantly different from zero (at p < .001), b = -0.118, p = 0.018.

6.7.4.9 Openness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5353.863 5453.108 0.993 0.037 0.032
# parameters of interest
params_lcs_openn_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_openn_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_openn_curr_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ goals", "goals ~~ goals", "openn_t1 ~ goals", # acceptance goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
Joining with `by = join_by(term)`
kable(params_lcs_openn_curr_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.021 NA NA 1.000 1.000
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.408 NA NA 1.000 1.000
d_openn_1 ~1 0.075 0.003 0.146 0.317 3.447 0.001 0.032 0.118
openn_t1 ~1 3.565 3.439 3.690 6.028 93.319 0.000 3.490 3.640
d_openn_1 ~~ d_openn_1 0.055 0.004 0.106 0.983 3.549 0.000 0.025 0.085
openn_t1 ~~ d_openn_1 -0.026 -0.067 0.016 -0.217 -2.050 0.040 -0.050 -0.001
openn_t1 ~ goals -0.521 -0.755 -0.287 -0.524 -7.339 0.000 -0.660 -0.382
d_openn_1 ~ goals 0.052 -0.081 0.185 0.130 1.278 0.201 -0.028 0.131
goals ~~ goals 0.353 0.145 0.562 1.000 5.579 0.000 0.229 0.478

The moderation effect of specific, facet-level acceptance goals with the openness change score (current-personality) is not significantly different from zero, b = 0.052, p = 0.201.

6.7.4.10 Openness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 26 5166.041 5265.286 0.995 0.029 0.035
# parameters of interest
params_lcs_openn_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_openn_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_openn_curr_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ frequ", "frequ ~~ frequ", "openn_t1 ~ frequ", # frequency of self improvement
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
Joining with `by = join_by(term)`
kable(params_lcs_openn_curr_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.021 NA NA 1.000 1.000
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.407 NA NA 1.000 1.000
d_openn_1 ~1 0.076 0.004 0.148 0.317 3.454 0.001 0.033 0.119
openn_t1 ~1 3.564 3.439 3.690 5.955 93.281 0.000 3.490 3.639
d_openn_1 ~~ d_openn_1 0.055 0.005 0.105 0.972 3.648 0.000 0.026 0.085
openn_t1 ~~ d_openn_1 -0.040 -0.083 0.003 -0.287 -3.041 0.002 -0.066 -0.014
openn_t1 ~ frequ 0.151 -0.042 0.343 0.173 2.576 0.010 0.036 0.265
d_openn_1 ~ frequ 0.059 -0.085 0.202 0.168 1.344 0.179 -0.027 0.144
frequ ~~ frequ 0.470 0.206 0.735 1.000 5.851 0.000 0.313 0.628

The moderation effect of frequency of self-acceptance behaviors with the openness change score (current-personality) is not significantly different from zero, b = 0.059, p = 0.179.

6.7.5 Big Five facets (run models)

Run models for all facets with a template & loop:

Show the code
# create templates:

# 1st, for facet-specific acceptance goal

facet_template_mod_goal_accept <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1         # This estimates the variance of facet_t1 
facet_t1 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
facet_t1 ~ ind_goal        # This estimates the moderation effect on personality at T1
d_facet_1 ~ ind_goal       # This estimates the moderation effect on the change score

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ind_goal ~~ ind_goal
ind_goal ~ 1
'

# loop across 15 facets -> changes in ideal personality
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  items = paste0(bfi_versions[[6]], item_nrs)
  mod_name = paste0("sa07_", str_pad(i-5, 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(facet_template_mod_goal_accept, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                         "ind_goal" = mod_name))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp7")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp7")), facet_model_fit))
}  

# loop across 15 facets -> changes in current personality
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  items = paste0(bfi_versions[[5]], item_nrs) # current instead of ideal!
  mod_name = paste0("sa07_", str_pad(i-5, 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(facet_template_mod_goal_accept, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                         "ind_goal" = mod_name))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp7")), template_filled)) # current instead of ideal!
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp7")), facet_model_fit))
}  

# we also need separate models for follow-up (fu), that is, changes from T2 to T3 (only for ideal personality ratings)

facet_template_mod_goal_accept_fu <- '
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2
facet_t3 =~ 1*ind1_t3 + lamb2*ind2_t3 + lamb3*ind3_t3 + lamb4*ind4_t3 # This specifies the measurement model for facet at T3 (with equality constraints)

facet_t3 ~ 1*facet_t2     # This parameter regresses facet_t3 perfectly on facet_t2
d_facet_1 =~ 1*facet_t3   # This defines the latent change score factor as measured perfectly by scores on facet_t3
facet_t3 ~ 0*1            # This line constrains the intercept of facet_t3 to 0
facet_t3 ~~ 0*facet_t3    # This fixes the variance of facet_t3 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t2 ~ 1               # This estimates the intercept of facet_t2 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t2 ~~ facet_t2         # This estimates the variance of facet_t2 
facet_t2 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
facet_t2 ~ ind_goal        # This estimates the moderation effect on personality at T2
d_facet_1 ~ ind_goal       # This estimates the moderation effect on the change score

ind1_t2 ~~ ind1_t3   # This allows residual covariance on indicator X1 across T2 and T3
ind2_t2 ~~ ind2_t3   # This allows residual covariance on indicator X2 across T2 and T3
ind3_t2 ~~ ind3_t3   # This allows residual covariance on indicator X3 across T2 and T3
ind4_t2 ~~ ind4_t3   # This allows residual covariance on indicator X4 across T2 and T3

ind1_t2 ~~ res1*ind1_t2   # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2   # This allows residual variance on indicator X2 at T2
ind3_t2 ~~ res3*ind3_t2   # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2   # This allows residual variance on indicator X4 at T2

ind1_t3 ~~ res1*ind1_t3  # This allows residual variance on indicator X1 at T3 
ind2_t3 ~~ res2*ind2_t3  # This allows residual variance on indicator X2 at T3 
ind3_t3 ~~ res3*ind3_t3  # This allows residual variance on indicator X3 at T3
ind4_t3 ~~ res4*ind4_t3  # This allows residual variance on indicator X4 at T3

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ind1_t3 ~ 0*1      # This constrains the intercept of X1 to 0 at T3
ind2_t3 ~ m2*1     # This estimates the intercept of X2 at T3
ind3_t3 ~ m3*1     # This estimates the intercept of X3 at T3
ind4_t3 ~ m4*1     # This estimates the intercept of X4 at T3

ind_goal ~~ ind_goal
ind_goal ~ 1
'

# loop across 15 facets -> changes in ideal personality (from T2 to T3)
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  items = paste0(bfi_versions[[6]], item_nrs)
  mod_name = paste0("sa07_", str_pad(i-5, 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(facet_template_mod_goal_accept_fu, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                         "ind_goal" = mod_name))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa_mod_fu, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp7_fu")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp7_fu")), facet_model_fit))
}  

# 2nd, for frequency of self-acceptance behavior

facet_template_mod_frequ_accept <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

frequ =~ 1*sa04_01_t2 + sa04_02_t2 + sa04_03_t2 # latent variable for moderator

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1         # This estimates the variance of facet_t1 
facet_t1 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
facet_t1 ~ frequ           # This estimates the moderation effect on personality at T1
d_facet_1 ~ frequ          # This estimates the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

sa04_01_t2 ~~ sa04_01_t2
sa04_02_t2 ~~ sa04_02_t2
sa04_03_t2 ~~ sa04_03_t2

sa04_01_t2 ~ 1
sa04_02_t2 ~ 1
sa04_03_t2 ~ 1
'

# loop across 15 facets -> changes in ideal personality
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  items = paste0(bfi_versions[[6]], item_nrs)
  template_filled <- str_replace_all(facet_template_mod_frequ_accept, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4]))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp7")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp7")), facet_model_fit))
}  

# loop across 15 facets -> changes in current personality
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  items = paste0(bfi_versions[[5]], item_nrs) # current instead of ideal!
  template_filled <- str_replace_all(facet_template_mod_frequ_accept, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4]))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp7")), template_filled)) # current instead of ideal!
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp7")), facet_model_fit))
}  

# we also need separate models for follow-up (fu), that is, changes from T2 to T3 (only for ideal personality ratings)

facet_template_mod_frequ_accept_fu <- '
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2
facet_t3 =~ 1*ind1_t3 + lamb2*ind2_t3 + lamb3*ind3_t3 + lamb4*ind4_t3 # This specifies the measurement model for facet at T3 (with equality constraints)

frequ =~ 1*sa04_01_t2 + sa04_02_t2 + sa04_03_t2 # latent variable for moderator

facet_t3 ~ 1*facet_t2     # This parameter regresses facet_t3 perfectly on facet_t2
d_facet_1 =~ 1*facet_t3   # This defines the latent change score factor as measured perfectly by scores on facet_t3
facet_t3 ~ 0*1            # This line constrains the intercept of facet_t3 to 0
facet_t3 ~~ 0*facet_t3    # This fixes the variance of facet_t3 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t2 ~ 1               # This estimates the intercept of facet_t2 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t2 ~~ facet_t2         # This estimates the variance of facet_t2 
facet_t2 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
facet_t2 ~ frequ           # This estimates the moderation effect on personality at T2
d_facet_1 ~ frequ          # This estimates the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

ind1_t2 ~~ ind1_t3   # This allows residual covariance on indicator X1 across T2 and T3
ind2_t2 ~~ ind2_t3   # This allows residual covariance on indicator X2 across T2 and T3
ind3_t2 ~~ ind3_t3   # This allows residual covariance on indicator X3 across T2 and T3
ind4_t2 ~~ ind4_t3   # This allows residual covariance on indicator X4 across T2 and T3

ind1_t2 ~~ res1*ind1_t2   # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2   # This allows residual variance on indicator X2 at T2
ind3_t2 ~~ res3*ind3_t2   # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2   # This allows residual variance on indicator X4 at T2

ind1_t3 ~~ res1*ind1_t3  # This allows residual variance on indicator X1 at T3 
ind2_t3 ~~ res2*ind2_t3  # This allows residual variance on indicator X2 at T3 
ind3_t3 ~~ res3*ind3_t3  # This allows residual variance on indicator X3 at T3
ind4_t3 ~~ res4*ind4_t3  # This allows residual variance on indicator X4 at T3

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ind1_t3 ~ 0*1      # This constrains the intercept of X1 to 0 at T3
ind2_t3 ~ m2*1     # This estimates the intercept of X2 at T3
ind3_t3 ~ m3*1     # This estimates the intercept of X3 at T3
ind4_t3 ~ m4*1     # This estimates the intercept of X4 at T3

sa04_01_t2 ~~ sa04_01_t2
sa04_02_t2 ~~ sa04_02_t2
sa04_03_t2 ~~ sa04_03_t2

sa04_01_t2 ~ 1
sa04_02_t2 ~ 1
sa04_03_t2 ~ 1
'

# loop across 15 facets -> changes in ideal personality
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  items = paste0(bfi_versions[[6]], item_nrs)
  template_filled <- str_replace_all(facet_template_mod_frequ_accept_fu, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4]))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa2_wide_pers_sa_mod_fu, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp7_fu")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp7_fu")), facet_model_fit))
} 

6.7.6 Big Five facets (ideal personality)

6.7.6.1 Sociability - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7858.806 7946.6 0.933 0.048 0.055
# parameters of interest
params_lcs_socia_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_socia_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_socia_ideal_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~ sa07_01_t1", "sa07_01_t1 ~~ sa07_01_t1", "d_socia_1 ~ sa07_01_t1", # acceptance goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
Joining with `by = join_by(term)`
kable(params_lcs_socia_ideal_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
socia_t2 ~ socia_t1 1.000 1.000 1.000 0.894 NA NA 1.000 1.000
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.483 NA NA 1.000 1.000
d_socia_1 ~1 -0.062 -0.162 0.039 -0.323 -2.023 0.043 -0.121 -0.002
socia_t1 ~1 4.226 4.092 4.359 11.965 103.948 0.000 4.146 4.305
d_socia_1 ~~ d_socia_1 0.032 -0.063 0.127 0.884 1.115 0.265 -0.024 0.089
socia_t1 ~~ d_socia_1 0.001 -0.052 0.054 0.020 0.077 0.939 -0.030 0.033
d_socia_1 ~ sa07_01_t1 -0.065 -0.166 0.036 -0.341 -2.120 0.034 -0.125 -0.005
sa07_01_t1 ~~ sa07_01_t1 0.997 0.821 1.173 1.000 18.622 0.000 0.892 1.102

The moderation effect of the facet-specific acceptance goal with the sociability change score (ideal-personality) is not significantly different from zero (at p < .001), b = -0.065, p = 0.034.

6.7.6.2 Sociability - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9080.175 9194.688 0.938 0.049 0.057
# parameters of interest
params_lcs_socia_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_socia_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_socia_ideal_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~ frequ", "frequ ~~ frequ", "socia_t1 ~ frequ", # frequency of self improvement
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
Joining with `by = join_by(term)`
kable(params_lcs_socia_ideal_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
socia_t2 ~ socia_t1 1.000 1.000 1.000 0.895 NA NA 1.000 1.000
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.488 NA NA 1.000 1.000
d_socia_1 ~1 -0.062 -0.164 0.041 -0.320 -1.982 0.048 -0.122 -0.001
socia_t1 ~1 4.226 4.090 4.361 11.988 102.547 0.000 4.145 4.307
d_socia_1 ~~ d_socia_1 0.037 -0.061 0.134 0.993 1.242 0.214 -0.021 0.095
socia_t1 ~~ d_socia_1 -0.002 -0.054 0.051 -0.026 -0.108 0.914 -0.033 0.030
socia_t1 ~ frequ 0.119 -0.072 0.310 0.235 2.052 0.040 0.005 0.233
d_socia_1 ~ frequ -0.024 -0.190 0.143 -0.086 -0.469 0.639 -0.123 0.076
frequ ~~ frequ 0.485 0.219 0.750 1.000 6.007 0.000 0.327 0.643

The moderation effect of the frequency of self-acceptance behaviors with sociability change score (ideal-personality) is not significantly different from zero, b = -0.024, p = 0.639.

6.7.6.3 Assertiveness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7792.121 7879.914 1 0 0.04
# parameters of interest
params_lcs_asser_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_asser_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_asser_ideal_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~ sa07_02_t1", "sa07_02_t1 ~~ sa07_02_t1", "d_asser_1 ~ sa07_02_t1", # acceptance goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
Joining with `by = join_by(term)`
kable(params_lcs_asser_ideal_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.922 NA NA 1.000 1.000
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.420 NA NA 1.000 1.000
d_asser_1 ~1 -0.025 -0.107 0.056 -0.154 -1.024 0.306 -0.074 0.023
asser_t1 ~1 4.134 3.983 4.285 11.495 89.930 0.000 4.044 4.224
d_asser_1 ~~ d_asser_1 0.026 -0.041 0.093 0.964 1.268 0.205 -0.014 0.066
asser_t1 ~~ d_asser_1 -0.003 -0.052 0.046 -0.058 -0.225 0.822 -0.032 0.026
d_asser_1 ~ sa07_02_t1 0.031 -0.054 0.116 0.189 1.197 0.231 -0.020 0.082
sa07_02_t1 ~~ sa07_02_t1 0.997 0.831 1.163 1.000 19.717 0.000 0.898 1.096

The moderation effect of the facet-specific acceptance goal with the assertiveness change score (ideal-personality) is not significantly different from zero, b = 0.031, p = 0.231.

6.7.6.4 Assertiveness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9005.413 9119.926 1 0 0.041
# parameters of interest
params_lcs_asser_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_asser_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_asser_ideal_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~ frequ", "frequ ~~ frequ", "asser_t1 ~ frequ", # frequency of self improvement
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
Joining with `by = join_by(term)`
kable(params_lcs_asser_ideal_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.922 NA NA 1.000 1.000
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.419 NA NA 1.000 1.000
d_asser_1 ~1 -0.026 -0.110 0.058 -0.155 -1.012 0.312 -0.076 0.024
asser_t1 ~1 4.134 3.982 4.286 11.256 89.400 0.000 4.044 4.225
d_asser_1 ~~ d_asser_1 0.028 -0.043 0.098 0.998 1.300 0.194 -0.014 0.070
asser_t1 ~~ d_asser_1 -0.001 -0.051 0.049 -0.021 -0.080 0.937 -0.031 0.029
asser_t1 ~ frequ 0.157 -0.027 0.340 0.297 2.812 0.005 0.047 0.266
d_asser_1 ~ frequ -0.011 -0.153 0.131 -0.046 -0.254 0.800 -0.096 0.074
frequ ~~ frequ 0.486 0.225 0.747 1.000 6.127 0.000 0.330 0.641

The moderation effect of the frequency of self-acceptance behaviors with assertiveness change score (ideal-personality) is not significantly different from zero, b = -0.011, p = 0.8.

6.7.6.5 Energy - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7507.595 7595.389 0.92 0.049 0.056
# parameters of interest
params_lcs_energ_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_energ_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_energ_ideal_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~ sa07_03_t1", "sa07_03_t1 ~~ sa07_03_t1", "d_energ_1 ~ sa07_03_t1", # acceptance goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
Joining with `by = join_by(term)`
kable(params_lcs_energ_ideal_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.001 NA NA 1.000 1.000
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.769 NA NA 1.000 1.000
d_energ_1 ~1 -0.002 -0.053 0.049 -0.014 -0.145 0.885 -0.033 0.028
energ_t1 ~1 3.779 3.583 3.974 17.997 63.551 0.000 3.662 3.895
d_energ_1 ~~ d_energ_1 0.026 -0.051 0.103 1.000 1.107 0.268 -0.020 0.072
energ_t1 ~~ d_energ_1 -0.013 -0.056 0.030 -0.386 -0.987 0.324 -0.039 0.013
d_energ_1 ~ sa07_03_t1 -0.002 -0.050 0.047 -0.010 -0.106 0.915 -0.031 0.027
sa07_03_t1 ~~ sa07_03_t1 0.997 0.815 1.179 1.000 18.028 0.000 0.889 1.105

The moderation effect of the facet-specific acceptance goal with the energy change score (ideal-personality) is not significantly different from zero, b = -0.002, p = 0.915.

6.7.6.6 Energy - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 8705.901 8820.415 0.943 0.046 0.056
# parameters of interest
params_lcs_energ_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_energ_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_energ_ideal_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~ frequ", "frequ ~~ frequ", "energ_t1 ~ frequ", # frequency of self improvement
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
Joining with `by = join_by(term)`
kable(params_lcs_energ_ideal_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.014 NA NA 1.000 1.000
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.763 NA NA 1.000 1.000
d_energ_1 ~1 0.000 -0.058 0.058 0.002 0.018 0.986 -0.034 0.035
energ_t1 ~1 3.778 3.581 3.974 16.212 63.380 0.000 3.661 3.894
d_energ_1 ~~ d_energ_1 0.030 -0.035 0.096 0.991 1.524 0.128 -0.009 0.070
energ_t1 ~~ d_energ_1 -0.017 -0.057 0.022 -0.453 -1.463 0.143 -0.041 0.006
energ_t1 ~ frequ 0.111 -0.038 0.260 0.327 2.457 0.014 0.022 0.200
d_energ_1 ~ frequ 0.024 -0.073 0.122 0.096 0.825 0.409 -0.034 0.083
frequ ~~ frequ 0.469 0.206 0.733 1.000 5.855 0.000 0.312 0.626

The moderation effect of the frequency of self-acceptance behaviors with the energy change score (ideal-personality) is not significantly different from zero, b = 0.024, p = 0.409.

6.7.6.7 Compassion - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 8103.431 8191.225 0.96 0.041 0.047
# parameters of interest
params_lcs_compa_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_compa_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_compa_ideal_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~ sa07_04_t1", "sa07_04_t1 ~~ sa07_04_t1", "d_compa_1 ~ sa07_04_t1", # acceptance goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
Joining with `by = join_by(term)`
kable(params_lcs_compa_ideal_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.017 NA NA 1.000 1.000
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.601 NA NA 1.000 1.000
d_compa_1 ~1 0.016 -0.119 0.152 0.046 0.401 0.689 -0.064 0.097
compa_t1 ~1 4.291 4.134 4.449 7.147 89.606 0.000 4.197 4.385
d_compa_1 ~~ d_compa_1 0.126 -0.057 0.308 0.999 2.265 0.024 0.017 0.234
compa_t1 ~~ d_compa_1 -0.068 -0.191 0.055 -0.325 -1.810 0.070 -0.141 0.006
d_compa_1 ~ sa07_04_t1 0.010 -0.138 0.159 0.029 0.226 0.821 -0.078 0.099
sa07_04_t1 ~~ sa07_04_t1 0.997 0.823 1.172 1.000 18.799 0.000 0.893 1.101

The moderation effect of the facet-specific acceptance goal with the compassion change score (ideal-personality) is not significantly different from zero, b = 0.01, p = 0.821.

6.7.6.8 Compassion - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9326.701 9441.214 0.975 0.033 0.043
# parameters of interest
params_lcs_compa_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_compa_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_compa_ideal_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~ frequ", "frequ ~~ frequ", "compa_t1 ~ frequ", # frequency of self improvement
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
Joining with `by = join_by(term)`
kable(params_lcs_compa_ideal_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.016 NA NA 1.000 1.000
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.604 NA NA 1.000 1.000
d_compa_1 ~1 0.020 -0.120 0.159 0.053 0.459 0.646 -0.064 0.103
compa_t1 ~1 4.291 4.132 4.449 6.900 88.970 0.000 4.196 4.385
d_compa_1 ~~ d_compa_1 0.137 -0.060 0.334 1.000 2.285 0.022 0.019 0.254
compa_t1 ~~ d_compa_1 -0.074 -0.209 0.061 -0.328 -1.814 0.070 -0.155 0.006
compa_t1 ~ frequ 0.151 -0.129 0.432 0.168 1.773 0.076 -0.016 0.318
d_compa_1 ~ frequ 0.000 -0.247 0.246 -0.001 -0.005 0.996 -0.147 0.146
frequ ~~ frequ 0.480 0.214 0.747 1.000 5.935 0.000 0.322 0.639

The moderation effect of the frequency of self-acceptance behaviors with the compassion change score (ideal-personality) is not significantly different from zero, b = 0, p = 0.996.

6.7.6.9 Respectfulness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 6287.373 6375.167 0.911 0.077 0.061
# parameters of interest
params_lcs_respe_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_respe_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_respe_ideal_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~ sa07_05_t1", "sa07_05_t1 ~~ sa07_05_t1", "d_respe_1 ~ sa07_05_t1", # acceptance goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
Joining with `by = join_by(term)`
kable(params_lcs_respe_ideal_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
respe_t2 ~ respe_t1 1.000 1.000 1.000 0.999 NA NA 1.000 1.000
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.391 NA NA 1.000 1.000
d_respe_1 ~1 -0.001 -0.071 0.069 -0.009 -0.063 0.950 -0.043 0.040
respe_t1 ~1 4.625 4.518 4.732 12.068 142.287 0.000 4.561 4.688
d_respe_1 ~~ d_respe_1 0.022 -0.025 0.070 0.999 1.558 0.119 -0.006 0.051
respe_t1 ~~ d_respe_1 -0.011 -0.056 0.034 -0.200 -0.834 0.404 -0.038 0.015
d_respe_1 ~ sa07_05_t1 -0.005 -0.084 0.073 -0.036 -0.228 0.820 -0.052 0.042
sa07_05_t1 ~~ sa07_05_t1 0.997 0.737 1.257 1.000 12.613 0.000 0.842 1.152

The moderation effect of the facet-specific acceptance goal with the respectfulness change score (ideal-personality) is not significantly different from zero, b = -0.005, p = 0.82.

6.7.6.10 Respectfulness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 7498.089 7612.602 0.967 0.044 0.045
# parameters of interest
params_lcs_respe_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_respe_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_respe_ideal_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~ frequ", "frequ ~~ frequ", "respe_t1 ~ frequ", # frequency of self improvement
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
Joining with `by = join_by(term)`
kable(params_lcs_respe_ideal_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
respe_t2 ~ respe_t1 1.000 1.000 1.000 0.997 NA NA 1.000 1.000
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.389 NA NA 1.000 1.000
d_respe_1 ~1 -0.001 -0.069 0.068 -0.006 -0.040 0.968 -0.042 0.040
respe_t1 ~1 4.625 4.516 4.734 12.266 139.842 0.000 4.560 4.690
d_respe_1 ~~ d_respe_1 0.021 -0.023 0.066 0.975 1.563 0.118 -0.005 0.048
respe_t1 ~~ d_respe_1 -0.012 -0.056 0.031 -0.234 -0.945 0.344 -0.038 0.013
respe_t1 ~ frequ 0.128 -0.019 0.276 0.236 2.862 0.004 0.041 0.216
d_respe_1 ~ frequ 0.033 -0.084 0.150 0.157 0.939 0.348 -0.036 0.103
frequ ~~ frequ 0.481 0.217 0.745 1.000 5.998 0.000 0.324 0.638

The moderation effect of the frequency of self-acceptance behaviors with respectfulness change score (ideal-personality) is not significantly different from zero, b = 0.033, p = 0.348.

6.7.6.11 Trust - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7836.569 7924.363 0.965 0.039 0.043
# parameters of interest
params_lcs_trust_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_trust_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_trust_ideal_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~ sa07_06_t1", "sa07_06_t1 ~~ sa07_06_t1", "d_trust_1 ~ sa07_06_t1", # acceptance goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
Joining with `by = join_by(term)`
kable(params_lcs_trust_ideal_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.106 NA NA 1.000 1.000
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.594 NA NA 1.000 1.000
d_trust_1 ~1 0.014 -0.089 0.118 0.052 0.449 0.653 -0.048 0.076
trust_t1 ~1 4.054 3.888 4.220 7.950 80.349 0.000 3.955 4.153
d_trust_1 ~~ d_trust_1 0.075 -0.045 0.195 0.998 2.062 0.039 0.004 0.146
trust_t1 ~~ d_trust_1 -0.061 -0.137 0.014 -0.440 -2.678 0.007 -0.106 -0.016
d_trust_1 ~ sa07_06_t1 0.013 -0.096 0.122 0.047 0.389 0.697 -0.052 0.078
sa07_06_t1 ~~ sa07_06_t1 0.997 0.823 1.171 1.000 18.829 0.000 0.893 1.101

The moderation effect of the facet-specific acceptance goal with the trust change score (ideal-personality) is not significantly different from zero, b = 0.013, p = 0.697.

6.7.6.12 Trust - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9043.04 9157.553 0.967 0.039 0.048
# parameters of interest
params_lcs_trust_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_trust_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_trust_ideal_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~ frequ", "frequ ~~ frequ", "trust_t1 ~ frequ", # frequency of self improvement
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
Joining with `by = join_by(term)`
kable(params_lcs_trust_ideal_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.107 NA NA 1.000 1.000
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.604 NA NA 1.000 1.000
d_trust_1 ~1 0.015 -0.087 0.118 0.056 0.488 0.626 -0.046 0.076
trust_t1 ~1 4.054 3.888 4.220 8.079 80.395 0.000 3.955 4.153
d_trust_1 ~~ d_trust_1 0.073 -0.045 0.190 0.973 2.041 0.041 0.003 0.143
trust_t1 ~~ d_trust_1 -0.065 -0.140 0.009 -0.490 -2.872 0.004 -0.109 -0.021
trust_t1 ~ frequ 0.142 -0.088 0.373 0.197 2.032 0.042 0.005 0.280
d_trust_1 ~ frequ 0.065 -0.114 0.244 0.165 1.196 0.232 -0.041 0.171
frequ ~~ frequ 0.481 0.215 0.748 1.000 5.954 0.000 0.323 0.640

The moderation effect of the frequency of self-acceptance behaviors with the trust change score (ideal-personality) is not significantly different from zero (at p < .001), b = 0.065, p = 0.232.

6.7.6.13 Organization - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 6764.729 6852.522 0.978 0.029 0.045
# parameters of interest
params_lcs_organ_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_organ_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_organ_ideal_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~ sa07_07_t1", "sa07_07_t1 ~~ sa07_07_t1", "d_organ_1 ~ sa07_07_t1", # acceptance goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
Joining with `by = join_by(term)`
kable(params_lcs_organ_ideal_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
organ_t2 ~ organ_t1 1.000 1.000 1.000 0.972 NA NA 1.000 1.000
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.604 NA NA 1.000 1.000
d_organ_1 ~1 0.005 -0.090 0.100 0.019 0.176 0.861 -0.052 0.062
organ_t1 ~1 4.246 4.074 4.418 9.999 81.046 0.000 4.143 4.349
d_organ_1 ~~ d_organ_1 0.069 -0.031 0.169 0.988 2.258 0.024 0.009 0.129
organ_t1 ~~ d_organ_1 -0.030 -0.112 0.053 -0.269 -1.191 0.234 -0.079 0.019
d_organ_1 ~ sa07_07_t1 -0.029 -0.130 0.071 -0.112 -0.967 0.334 -0.089 0.030
sa07_07_t1 ~~ sa07_07_t1 0.997 0.850 1.144 1.000 22.344 0.000 0.910 1.084

The moderation effect of the facet-specific acceptance goal with the organization change score (ideal-personality) is not significantly different from zero, b = -0.029, p = 0.334.

6.7.6.14 Organization - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 7978.169 8092.682 0.992 0.017 0.043
# parameters of interest
params_lcs_organ_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_organ_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_organ_ideal_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~ frequ", "frequ ~~ frequ", "organ_t1 ~ frequ", # frequency of self improvement
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
Joining with `by = join_by(term)`
kable(params_lcs_organ_ideal_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
organ_t2 ~ organ_t1 1.000 1.000 1.000 0.970 NA NA 1.000 1.000
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.605 NA NA 1.000 1.000
d_organ_1 ~1 0.005 -0.089 0.099 0.019 0.177 0.860 -0.051 0.061
organ_t1 ~1 4.246 4.074 4.418 10.120 81.057 0.000 4.143 4.349
d_organ_1 ~~ d_organ_1 0.068 -0.033 0.170 1.000 2.209 0.027 0.008 0.129
organ_t1 ~~ d_organ_1 -0.029 -0.114 0.056 -0.269 -1.119 0.263 -0.080 0.022
organ_t1 ~ frequ 0.124 -0.081 0.329 0.205 1.986 0.047 0.002 0.246
d_organ_1 ~ frequ 0.003 -0.165 0.172 0.009 0.067 0.947 -0.097 0.104
frequ ~~ frequ 0.481 0.216 0.745 1.000 5.982 0.000 0.323 0.638

The moderation effect of the frequency of self-acceptance behaviors with the organization change score (ideal-personality) is not significantly different from zero, b = 0.003, p = 0.947.

6.7.6.15 Productiveness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 6161.35 6249.144 0.909 0.069 0.066
# parameters of interest
params_lcs_produ_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_produ_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_produ_ideal_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~ sa07_08_t1", "sa07_08_t1 ~~ sa07_08_t1", "d_produ_1 ~ sa07_08_t1", # acceptance goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
Joining with `by = join_by(term)`
kable(params_lcs_produ_ideal_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.046 NA NA 1.000 1.000
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.676 NA NA 1.000 1.000
d_produ_1 ~1 0.028 -0.051 0.107 0.117 1.172 0.241 -0.019 0.075
produ_t1 ~1 4.415 4.284 4.546 11.949 111.087 0.000 4.337 4.493
d_produ_1 ~~ d_produ_1 0.056 -0.023 0.135 0.979 2.314 0.021 0.009 0.103
produ_t1 ~~ d_produ_1 -0.034 -0.096 0.027 -0.396 -1.851 0.064 -0.071 0.002
d_produ_1 ~ sa07_08_t1 -0.035 -0.113 0.043 -0.146 -1.474 0.141 -0.081 0.012
sa07_08_t1 ~~ sa07_08_t1 0.997 0.829 1.165 1.000 19.477 0.000 0.897 1.097

The moderation effect of the facet-specific acceptance goal with the productiveness change score (ideal-personality) is not significantly different from zero, b = -0.035, p = 0.141.

6.7.6.16 Productiveness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 7371.889 7486.402 0.922 0.064 0.064
# parameters of interest
params_lcs_produ_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_produ_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_produ_ideal_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~ frequ", "frequ ~~ frequ", "produ_t1 ~ frequ", # frequency of self improvement
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
Joining with `by = join_by(term)`
kable(params_lcs_produ_ideal_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.042 NA NA 1.000 1.000
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.675 NA NA 1.000 1.000
d_produ_1 ~1 0.029 -0.049 0.108 0.123 1.236 0.216 -0.017 0.076
produ_t1 ~1 4.415 4.285 4.546 11.928 111.134 0.000 4.337 4.493
d_produ_1 ~~ d_produ_1 0.055 -0.024 0.133 0.952 2.300 0.021 0.008 0.101
produ_t1 ~~ d_produ_1 -0.036 -0.098 0.026 -0.423 -1.928 0.054 -0.073 0.001
produ_t1 ~ frequ 0.063 -0.088 0.215 0.117 1.377 0.168 -0.027 0.153
d_produ_1 ~ frequ 0.077 -0.054 0.207 0.219 1.934 0.053 -0.001 0.154
frequ ~~ frequ 0.470 0.207 0.733 1.000 5.875 0.000 0.313 0.626

The moderation effect of the frequency of self-acceptance behaviors with the productiveness change score (ideal-personality) is not significantly different from zero (at p < .001), b = 0.077, p = 0.053.

6.7.6.17 Responsibility - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 6981.709 7069.502 0.959 0.047 0.051
# parameters of interest
params_lcs_respo_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_respo_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_respo_ideal_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~ sa07_09_t1", "sa07_09_t1 ~~ sa07_09_t1", "d_respo_1 ~ sa07_09_t1", # acceptance goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
Joining with `by = join_by(term)`
kable(params_lcs_respo_ideal_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
respo_t2 ~ respo_t1 1.000 1.000 1.000 0.912 NA NA 1.000 1.000
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.623 NA NA 1.000 1.000
d_respo_1 ~1 0.017 -0.072 0.105 0.063 0.622 0.534 -0.036 0.070
respo_t1 ~1 4.239 4.064 4.414 10.920 79.793 0.000 4.135 4.343
d_respo_1 ~~ d_respo_1 0.069 -0.024 0.163 0.987 2.449 0.014 0.014 0.125
respo_t1 ~~ d_respo_1 -0.021 -0.079 0.037 -0.205 -1.179 0.238 -0.056 0.014
d_respo_1 ~ sa07_09_t1 -0.030 -0.120 0.060 -0.113 -1.098 0.272 -0.083 0.023
sa07_09_t1 ~~ sa07_09_t1 0.997 0.828 1.166 1.000 19.415 0.000 0.896 1.098

The moderation effect of the facet-specific acceptance goal with the responsibility change score (ideal-personality) is not significantly different from zero, b = -0.03, p = 0.272.

6.7.6.18 Responsibility - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 8195.653 8310.167 0.972 0.038 0.049
# parameters of interest
params_lcs_respo_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_respo_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_respo_ideal_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~ frequ", "frequ ~~ frequ", "respo_t1 ~ frequ", # frequency of self improvement
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
Joining with `by = join_by(term)`
kable(params_lcs_respo_ideal_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
respo_t2 ~ respo_t1 1.000 1.000 1.000 0.912 NA NA 1.000 1.000
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.626 NA NA 1.000 1.000
d_respo_1 ~1 0.018 -0.072 0.107 0.066 0.656 0.512 -0.035 0.071
respo_t1 ~1 4.239 4.064 4.413 10.726 80.005 0.000 4.135 4.343
d_respo_1 ~~ d_respo_1 0.071 -0.023 0.165 0.967 2.484 0.013 0.015 0.127
respo_t1 ~~ d_respo_1 -0.024 -0.085 0.037 -0.230 -1.302 0.193 -0.060 0.012
respo_t1 ~ frequ 0.089 -0.098 0.277 0.156 1.568 0.117 -0.022 0.201
d_respo_1 ~ frequ 0.071 -0.073 0.216 0.181 1.622 0.105 -0.015 0.157
frequ ~~ frequ 0.477 0.211 0.743 1.000 5.904 0.000 0.319 0.635

The moderation effect of the frequency of self-acceptance behaviors with the responsibility change score (ideal-personality) is not significantly different from zero (at p < .001), b = 0.071, p = 0.105.

6.7.6.19 Anxiety - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7747.267 7835.06 0.922 0.05 0.059
# parameters of interest
params_lcs_anxie_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_anxie_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_anxie_ideal_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~ sa07_10_t1", "sa07_10_t1 ~~ sa07_10_t1", "d_anxie_1 ~ sa07_10_t1", # acceptance goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
Joining with `by = join_by(term)`
kable(params_lcs_anxie_ideal_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.180 NA NA 1.000 1.000
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.730 NA NA 1.000 1.000
d_anxie_1 ~1 -0.019 -0.117 0.078 -0.076 -0.652 0.515 -0.077 0.039
anxie_t1 ~1 1.470 1.337 1.603 3.596 36.300 0.000 1.390 1.549
d_anxie_1 ~~ d_anxie_1 0.064 -0.050 0.178 1.000 1.850 0.064 -0.004 0.132
anxie_t1 ~~ d_anxie_1 -0.056 -0.160 0.049 -0.538 -1.746 0.081 -0.118 0.007
d_anxie_1 ~ sa07_10_t1 0.004 -0.083 0.090 0.014 0.139 0.890 -0.048 0.055
sa07_10_t1 ~~ sa07_10_t1 0.997 0.844 1.150 1.000 21.431 0.000 0.906 1.088

The moderation effect of the facet-specific acceptance goal with the anxiety change score (ideal-personality) is not significantly different from zero, b = 0.004, p = 0.89.

6.7.6.20 Anxiety - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 8960.427 9074.94 0.969 0.034 0.05
# parameters of interest
params_lcs_anxie_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_anxie_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_anxie_ideal_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~ frequ", "frequ ~~ frequ", "anxie_t1 ~ frequ", # frequency of self improvement
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
Joining with `by = join_by(term)`
kable(params_lcs_anxie_ideal_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.183 NA NA 1.000 1.000
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.726 NA NA 1.000 1.000
d_anxie_1 ~1 -0.020 -0.121 0.080 -0.079 -0.662 0.508 -0.080 0.040
anxie_t1 ~1 1.470 1.336 1.604 3.498 36.164 0.000 1.391 1.550
d_anxie_1 ~~ d_anxie_1 0.064 -0.052 0.179 0.956 1.812 0.070 -0.005 0.132
anxie_t1 ~~ d_anxie_1 -0.054 -0.157 0.050 -0.518 -1.705 0.088 -0.115 0.008
anxie_t1 ~ frequ -0.128 -0.325 0.069 -0.213 -2.144 0.032 -0.245 -0.011
d_anxie_1 ~ frequ 0.077 -0.093 0.248 0.210 1.496 0.135 -0.024 0.179
frequ ~~ frequ 0.489 0.221 0.756 1.000 6.014 0.000 0.329 0.648

The moderation effect of the frequency of self-acceptance behaviors with the anxiety change score (ideal-personality) is not significantly different from zero, b = 0.077, p = 0.135.

6.7.6.21 Depression - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 6173.072 6260.866 0.94 0.055 0.052
# parameters of interest
params_lcs_depre_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_depre_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_depre_ideal_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~ sa07_11_t1", "sa07_11_t1 ~~ sa07_11_t1", "d_depre_1 ~ sa07_11_t1", # acceptance goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
Joining with `by = join_by(term)`
kable(params_lcs_depre_ideal_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.157 NA NA 1.000 1.000
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.700 NA NA 1.000 1.000
d_depre_1 ~1 -0.006 -0.093 0.080 -0.024 -0.237 0.813 -0.058 0.045
depre_t1 ~1 1.557 1.430 1.683 3.557 40.495 0.000 1.481 1.632
d_depre_1 ~~ d_depre_1 0.070 -0.028 0.168 0.999 2.357 0.018 0.012 0.128
depre_t1 ~~ d_depre_1 -0.059 -0.141 0.022 -0.512 -2.394 0.017 -0.108 -0.011
d_depre_1 ~ sa07_11_t1 0.006 -0.077 0.090 0.024 0.248 0.804 -0.043 0.056
sa07_11_t1 ~~ sa07_11_t1 0.997 0.848 1.146 1.000 21.989 0.000 0.908 1.086

The moderation effect of the facet-specific acceptance goal with the depression change score (ideal-personality) is not significantly different from zero, b = 0.006, p = 0.804.

6.7.6.22 Depression - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 7387.206 7501.72 0.944 0.053 0.057
# parameters of interest
params_lcs_depre_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_depre_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_depre_ideal_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~ frequ", "frequ ~~ frequ", "depre_t1 ~ frequ", # frequency of self improvement
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
Joining with `by = join_by(term)`
kable(params_lcs_depre_ideal_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.156 NA NA 1.000 1.000
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.700 NA NA 1.000 1.000
d_depre_1 ~1 -0.006 -0.094 0.082 -0.022 -0.226 0.821 -0.059 0.047
depre_t1 ~1 1.557 1.430 1.684 3.482 40.408 0.000 1.481 1.632
d_depre_1 ~~ d_depre_1 0.073 -0.029 0.174 0.993 2.360 0.018 0.012 0.133
depre_t1 ~~ d_depre_1 -0.060 -0.141 0.022 -0.505 -2.418 0.016 -0.108 -0.011
depre_t1 ~ frequ -0.116 -0.317 0.085 -0.180 -1.895 0.058 -0.236 0.004
d_depre_1 ~ frequ 0.033 -0.117 0.183 0.084 0.719 0.472 -0.057 0.122
frequ ~~ frequ 0.479 0.213 0.746 1.000 5.924 0.000 0.321 0.638

The moderation effect of the frequency of self-acceptance behaviors with the depression change score (ideal-personality) is not significantly different from zero, b = 0.033, p = 0.472.

6.7.6.23 Volatility - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7220.041 7307.834 0.954 0.042 0.051
# parameters of interest
params_lcs_volat_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_volat_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_volat_ideal_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~ sa07_12_t1", "sa07_12_t1 ~~ sa07_12_t1", "d_volat_1 ~ sa07_12_t1", # acceptance goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
Joining with `by = join_by(term)`
kable(params_lcs_volat_ideal_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.020 NA NA 1.000 1.000
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.570 NA NA 1.000 1.000
d_volat_1 ~1 -0.010 -0.114 0.095 -0.038 -0.308 0.758 -0.072 0.052
volat_t1 ~1 1.647 1.513 1.780 3.615 40.652 0.000 1.567 1.726
d_volat_1 ~~ d_volat_1 0.062 -0.045 0.169 0.953 1.897 0.058 -0.002 0.126
volat_t1 ~~ d_volat_1 -0.031 -0.107 0.045 -0.279 -1.330 0.184 -0.076 0.015
d_volat_1 ~ sa07_12_t1 -0.055 -0.153 0.043 -0.216 -1.855 0.064 -0.113 0.003
sa07_12_t1 ~~ sa07_12_t1 0.997 0.823 1.171 1.000 18.847 0.000 0.893 1.101

The moderation effect of the facet-specific acceptance goal with the volatility change score (ideal-personality) is not significantly different from zero, b = -0.055, p = 0.064.

6.7.6.24 Volatility - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 8442.839 8557.353 0.96 0.041 0.051
# parameters of interest
params_lcs_volat_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_volat_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_volat_ideal_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~ frequ", "frequ ~~ frequ", "volat_t1 ~ frequ", # frequency of self improvement
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
Joining with `by = join_by(term)`
kable(params_lcs_volat_ideal_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.013 NA NA 1.000 1.000
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.565 NA NA 1.000 1.000
d_volat_1 ~1 -0.009 -0.115 0.097 -0.034 -0.269 0.788 -0.072 0.055
volat_t1 ~1 1.646 1.512 1.781 3.576 40.293 0.000 1.566 1.726
d_volat_1 ~~ d_volat_1 0.065 -0.046 0.177 0.992 1.926 0.054 -0.001 0.132
volat_t1 ~~ d_volat_1 -0.038 -0.121 0.046 -0.324 -1.479 0.139 -0.087 0.012
volat_t1 ~ frequ -0.117 -0.338 0.104 -0.176 -1.747 0.081 -0.249 0.014
d_volat_1 ~ frequ -0.033 -0.215 0.148 -0.090 -0.606 0.545 -0.141 0.075
frequ ~~ frequ 0.480 0.215 0.744 1.000 5.956 0.000 0.322 0.637

The moderation effect of the frequency of self-acceptance behaviors with the volatility change score (ideal-personality) is not significantly different from zero, b = -0.033, p = 0.545.

6.7.6.25 Curiosity - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7620.132 7707.926 0.972 0.035 0.05
# parameters of interest
params_lcs_curio_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_curio_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_curio_ideal_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~ sa07_13_t1", "sa07_13_t1 ~~ sa07_13_t1", "d_curio_1 ~ sa07_13_t1", # acceptance goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
Joining with `by = join_by(term)`
kable(params_lcs_curio_ideal_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.085 NA NA 1.000 1.000
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.547 NA NA 1.000 1.000
d_curio_1 ~1 0.017 -0.073 0.107 0.081 0.625 0.532 -0.037 0.071
curio_t1 ~1 4.458 4.334 4.581 10.649 118.797 0.000 4.384 4.531
d_curio_1 ~~ d_curio_1 0.044 -0.041 0.128 0.981 1.702 0.089 -0.007 0.094
curio_t1 ~~ d_curio_1 -0.032 -0.097 0.033 -0.382 -1.633 0.103 -0.071 0.006
d_curio_1 ~ sa07_13_t1 0.029 -0.049 0.108 0.138 1.222 0.222 -0.018 0.076
sa07_13_t1 ~~ sa07_13_t1 0.997 0.809 1.185 1.000 17.438 0.000 0.885 1.109

The moderation effect of the facet-specific acceptance goal with the curiosity change score (ideal-personality) is not significantly different from zero, b = 0.029, p = 0.222.

6.7.6.26 Curiosity - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 8853.449 8967.962 0.983 0.027 0.049
# parameters of interest
params_lcs_curio_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_curio_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_curio_ideal_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~ frequ", "frequ ~~ frequ", "curio_t1 ~ frequ", # frequency of self improvement
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
Joining with `by = join_by(term)`
kable(params_lcs_curio_ideal_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.084 NA NA 1.000 1.000
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.543 NA NA 1.000 1.000
d_curio_1 ~1 0.017 -0.072 0.106 0.081 0.613 0.540 -0.036 0.070
curio_t1 ~1 4.458 4.332 4.584 10.853 116.407 0.000 4.383 4.533
d_curio_1 ~~ d_curio_1 0.042 -0.040 0.124 0.992 1.692 0.091 -0.007 0.091
curio_t1 ~~ d_curio_1 -0.034 -0.100 0.032 -0.404 -1.689 0.091 -0.073 0.005
curio_t1 ~ frequ 0.020 -0.162 0.203 0.035 0.369 0.712 -0.088 0.129
d_curio_1 ~ frequ 0.027 -0.109 0.162 0.090 0.643 0.520 -0.054 0.107
frequ ~~ frequ 0.485 0.219 0.750 1.000 6.009 0.000 0.327 0.643

The moderation effect of the frequency of self-acceptance behaviors with the curiosity change score (ideal-personality) is not significantly different from zero, b = 0.027, p = 0.52.

6.7.6.27 Aesthetic - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7644.521 7732.315 0.97 0.044 0.044
# parameters of interest
params_lcs_aesth_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_aesth_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_aesth_ideal_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~ sa07_14_t1", "sa07_14_t1 ~~ sa07_14_t1", "d_aesth_1 ~ sa07_14_t1", # acceptance goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
Joining with `by = join_by(term)`
kable(params_lcs_aesth_ideal_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.972 NA NA 1.000 1.000
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.609 NA NA 1.000 1.000
d_aesth_1 ~1 0.020 -0.036 0.077 0.119 1.175 0.240 -0.013 0.054
aesth_t1 ~1 3.097 2.871 3.323 11.421 45.050 0.000 2.962 3.232
d_aesth_1 ~~ d_aesth_1 0.029 -0.022 0.079 0.999 1.875 0.061 -0.001 0.059
aesth_t1 ~~ d_aesth_1 -0.012 -0.041 0.018 -0.266 -1.323 0.186 -0.029 0.006
d_aesth_1 ~ sa07_14_t1 0.006 -0.039 0.051 0.037 0.459 0.646 -0.020 0.033
sa07_14_t1 ~~ sa07_14_t1 0.997 0.848 1.146 1.000 21.957 0.000 0.908 1.086

The moderation effect of the facet-specific acceptance goal with the aesthetic change score (ideal-personality) is not significantly different from zero, b = 0.006, p = 0.646.

6.7.6.28 Aesthetic - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 8864.521 8979.034 0.979 0.035 0.047
# parameters of interest
params_lcs_aesth_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_aesth_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_aesth_ideal_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~ frequ", "frequ ~~ frequ", "aesth_t1 ~ frequ", # frequency of self improvement
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
Joining with `by = join_by(term)`
kable(params_lcs_aesth_ideal_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.969 NA NA 1.000 1.000
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.609 NA NA 1.000 1.000
d_aesth_1 ~1 0.019 -0.036 0.074 0.117 1.145 0.252 -0.014 0.052
aesth_t1 ~1 3.097 2.870 3.325 11.970 44.854 0.000 2.962 3.233
d_aesth_1 ~~ d_aesth_1 0.026 -0.022 0.075 0.992 1.788 0.074 -0.003 0.055
aesth_t1 ~~ d_aesth_1 -0.012 -0.042 0.018 -0.298 -1.310 0.190 -0.030 0.006
aesth_t1 ~ frequ 0.097 -0.023 0.218 0.260 2.663 0.008 0.026 0.169
d_aesth_1 ~ frequ 0.021 -0.076 0.119 0.091 0.723 0.470 -0.037 0.079
frequ ~~ frequ 0.477 0.213 0.741 1.000 5.940 0.000 0.319 0.634

The moderation effect of the frequency of self-acceptance behaviors with the aesthetic change score (ideal-personality) is not significantly different from zero, b = 0.021, p = 0.47.

6.7.6.29 Imagination - specific, facet-level acceptance goal as moderator of change

Results summary (*sa07_$$_t1* = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7191.839 7279.632 0.908 0.07 0.06
# parameters of interest
params_lcs_imagi_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_imagi_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_imagi_ideal_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~ sa07_15_t1", "sa07_15_t1 ~~ sa07_15_t1", "d_imagi_1 ~ sa07_15_t1", # acceptance goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
Joining with `by = join_by(term)`
kable(params_lcs_imagi_ideal_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.047 NA NA 1.000 1.000
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.654 NA NA 1.000 1.000
d_imagi_1 ~1 -0.012 -0.118 0.095 -0.035 -0.361 0.718 -0.075 0.052
imagi_t1 ~1 4.544 4.416 4.673 8.566 116.358 0.000 4.468 4.621
d_imagi_1 ~~ d_imagi_1 0.110 -0.026 0.245 0.997 2.662 0.008 0.029 0.190
imagi_t1 ~~ d_imagi_1 -0.069 -0.170 0.033 -0.397 -2.231 0.026 -0.129 -0.008
d_imagi_1 ~ sa07_15_t1 -0.019 -0.125 0.088 -0.056 -0.574 0.566 -0.082 0.045
sa07_15_t1 ~~ sa07_15_t1 0.997 0.856 1.138 1.000 23.329 0.000 0.913 1.081

The moderation effect of the facet-specific acceptance goal with the imagination change score (ideal-personality) is not significantly different from zero, b = -0.019, p = 0.566.

6.7.6.30 Imagination - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 8415.335 8529.848 0.966 0.041 0.048
# parameters of interest
params_lcs_imagi_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_imagi_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_imagi_ideal_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~ frequ", "frequ ~~ frequ", "imagi_t1 ~ frequ", # frequency of self improvement
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
Joining with `by = join_by(term)`
kable(params_lcs_imagi_ideal_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.042 NA NA 1.000 1.000
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.651 NA NA 1.000 1.000
d_imagi_1 ~1 -0.012 -0.117 0.094 -0.035 -0.362 0.717 -0.074 0.051
imagi_t1 ~1 4.545 4.415 4.674 8.635 115.719 0.000 4.468 4.622
d_imagi_1 ~~ d_imagi_1 0.108 -0.027 0.242 0.996 2.635 0.008 0.028 0.188
imagi_t1 ~~ d_imagi_1 -0.063 -0.167 0.041 -0.370 -1.991 0.046 -0.125 -0.001
imagi_t1 ~ frequ 0.132 -0.046 0.309 0.173 2.439 0.015 0.026 0.237
d_imagi_1 ~ frequ -0.031 -0.216 0.154 -0.066 -0.554 0.580 -0.141 0.079
frequ ~~ frequ 0.480 0.216 0.745 1.000 5.977 0.000 0.323 0.638

The moderation effect of the frequency of self-acceptance behaviors with the imagination change score (ideal-personality) is not significantly different from zero, b = -0.031, p = 0.58.

6.7.7 Big Five facets (ideal personality - follow-up T3)

6.7.7.1 Sociability - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 6702.184 6786.111 0.953 0.048 0.058
# parameters of interest
params_lcs_socia_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_socia_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_socia_ideal_specif_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("socia_t3 ~ socia_t2", "d_socia_1 =~ socia_t3", "socia_t2 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~ sa07_01_t1", "sa07_01_t1 ~~ sa07_01_t1", "d_socia_1 ~ sa07_01_t1", # acceptance goals
                     "d_socia_1 ~1 ", "socia_t2 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
Joining with `by = join_by(term)`
kable(params_lcs_socia_ideal_specif_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
socia_t3 ~ socia_t2 1.000 1.000 1.000 1.051 NA NA 1.000 1.000
d_socia_1 =~ socia_t3 1.000 1.000 1.000 0.624 NA NA 1.000 1.000
d_socia_1 ~1 0.006 -0.096 0.107 0.024 0.183 0.855 -0.055 0.066
socia_t2 ~1 4.158 4.000 4.316 10.565 86.768 0.000 4.064 4.252
d_socia_1 ~~ d_socia_1 0.054 -0.029 0.136 0.985 2.147 0.032 0.005 0.103
socia_t2 ~~ d_socia_1 -0.034 -0.099 0.030 -0.377 -1.749 0.080 -0.073 0.004
d_socia_1 ~ sa07_01_t1 0.028 -0.058 0.113 0.121 1.061 0.289 -0.023 0.079
sa07_01_t1 ~~ sa07_01_t1 1.051 0.857 1.245 1.000 17.799 0.000 0.935 1.166

The moderation effect of the facet-specific acceptance goal with the sociability change score from T2 to T3 (ideal-personality) is not significantly different from zero (at p < .001), b = 0.028, p = 0.289.

6.7.7.2 Sociability - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 8051.682 8161.151 0.94 0.056 0.059
# parameters of interest
params_lcs_socia_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_socia_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_socia_ideal_frequ_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("socia_t3 ~ socia_t2", "d_socia_1 =~ socia_t3", "socia_t2 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~ frequ", "frequ ~~ frequ", "socia_t2 ~ frequ", # frequency of self improvement
                           "d_socia_1 ~1 ", "socia_t2 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
Joining with `by = join_by(term)`
kable(params_lcs_socia_ideal_frequ_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
socia_t3 ~ socia_t2 1.000 1.000 1.000 1.049 NA NA 1.000 1.000
d_socia_1 =~ socia_t3 1.000 1.000 1.000 0.619 NA NA 1.000 1.000
d_socia_1 ~1 0.004 -0.101 0.109 0.016 0.122 0.903 -0.059 0.066
socia_t2 ~1 4.159 4.001 4.317 10.403 86.649 0.000 4.065 4.253
d_socia_1 ~~ d_socia_1 0.056 -0.030 0.141 1.000 2.148 0.032 0.005 0.106
socia_t2 ~~ d_socia_1 -0.035 -0.102 0.032 -0.375 -1.706 0.088 -0.075 0.005
socia_t2 ~ frequ 0.086 -0.111 0.283 0.149 1.433 0.152 -0.031 0.203
d_socia_1 ~ frequ -0.004 -0.171 0.163 -0.011 -0.074 0.941 -0.103 0.096
frequ ~~ frequ 0.486 0.221 0.750 1.000 6.036 0.000 0.328 0.643

The moderation effect of the frequency of self-acceptance behaviors with sociability change score from T2 to T3 (ideal-personality) is not significantly different from zero, b = -0.004, p = 0.941.

6.7.7.3 Assertiveness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 6798.237 6882.164 0.987 0.023 0.047
# parameters of interest
params_lcs_asser_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_asser_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_asser_ideal_specif_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("asser_t3 ~ asser_t2", "d_asser_1 =~ asser_t3", "asser_t2 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~ sa07_02_t1", "sa07_02_t1 ~~ sa07_02_t1", "d_asser_1 ~ sa07_02_t1", # acceptance goals
                     "d_asser_1 ~1 ", "asser_t2 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
Joining with `by = join_by(term)`
kable(params_lcs_asser_ideal_specif_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
asser_t3 ~ asser_t2 1.000 1.000 1.000 1.054 NA NA 1.000 1.000
d_asser_1 =~ asser_t3 1.000 1.000 1.000 0.797 NA NA 1.000 1.000
d_asser_1 ~1 -0.017 -0.108 0.075 -0.057 -0.603 0.546 -0.071 0.038
asser_t2 ~1 4.107 3.931 4.283 10.486 76.721 0.000 4.002 4.212
d_asser_1 ~~ d_asser_1 0.088 -0.020 0.195 0.999 2.670 0.008 0.023 0.152
asser_t2 ~~ d_asser_1 -0.051 -0.133 0.032 -0.445 -2.029 0.042 -0.100 -0.002
d_asser_1 ~ sa07_02_t1 -0.011 -0.106 0.084 -0.037 -0.379 0.705 -0.068 0.046
sa07_02_t1 ~~ sa07_02_t1 1.008 0.828 1.189 1.000 18.385 0.000 0.901 1.116

The moderation effect of the facet-specific acceptance goal with the assertiveness change score from T2 to T3 (ideal-personality) is not significantly different from zero, b = -0.011, p = 0.705.

6.7.7.4 Assertiveness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 8159.952 8269.422 1 0 0.044
# parameters of interest
params_lcs_asser_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_asser_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_asser_ideal_frequ_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("asser_t3 ~ asser_t2", "d_asser_1 =~ asser_t3", "asser_t2 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~ frequ", "frequ ~~ frequ", "asser_t2 ~ frequ", # frequency of self improvement
                           "d_asser_1 ~1 ", "asser_t2 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
Joining with `by = join_by(term)`
kable(params_lcs_asser_ideal_frequ_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
asser_t3 ~ asser_t2 1.000 1.000 1.000 1.063 NA NA 1.000 1.000
d_asser_1 =~ asser_t3 1.000 1.000 1.000 0.800 NA NA 1.000 1.000
d_asser_1 ~1 -0.017 -0.113 0.079 -0.056 -0.594 0.553 -0.074 0.040
asser_t2 ~1 4.107 3.928 4.286 10.087 75.476 0.000 4.000 4.214
d_asser_1 ~~ d_asser_1 0.092 -0.012 0.196 0.982 2.912 0.004 0.030 0.154
asser_t2 ~~ d_asser_1 -0.052 -0.131 0.027 -0.437 -2.178 0.029 -0.099 -0.005
asser_t2 ~ frequ 0.150 -0.090 0.389 0.256 2.053 0.040 0.007 0.292
d_asser_1 ~ frequ -0.059 -0.228 0.109 -0.135 -1.162 0.245 -0.160 0.041
frequ ~~ frequ 0.486 0.225 0.746 1.000 6.131 0.000 0.330 0.641

The moderation effect of the frequency of self-acceptance behaviors with assertiveness change score from T2 to T3 (ideal-personality) is not significantly different from zero, b = -0.059, p = 0.245.

6.7.7.5 Energy - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 6412.363 6496.289 0.921 0.048 0.062
# parameters of interest
params_lcs_energ_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_energ_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_energ_ideal_specif_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("energ_t3 ~ energ_t2", "d_energ_1 =~ energ_t3", "energ_t2 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~ sa07_03_t1", "sa07_03_t1 ~~ sa07_03_t1", "d_energ_1 ~ sa07_03_t1", # acceptance goals
                     "d_energ_1 ~1 ", "energ_t2 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
Joining with `by = join_by(term)`
kable(params_lcs_energ_ideal_specif_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
energ_t3 ~ energ_t2 1.000 1.000 1.000 0.971 NA NA 1.000 1.000
d_energ_1 =~ energ_t3 1.000 1.000 1.000 0.634 NA NA 1.000 1.000
d_energ_1 ~1 0.003 -0.063 0.068 0.016 0.130 0.897 -0.036 0.042
energ_t2 ~1 3.767 3.557 3.977 15.117 58.989 0.000 3.642 3.892
d_energ_1 ~~ d_energ_1 0.026 -0.049 0.102 0.998 1.153 0.249 -0.018 0.071
energ_t2 ~~ d_energ_1 -0.011 -0.050 0.027 -0.283 -0.972 0.331 -0.035 0.012
d_energ_1 ~ sa07_03_t1 0.007 -0.057 0.070 0.041 0.344 0.731 -0.031 0.045
sa07_03_t1 ~~ sa07_03_t1 1.006 0.804 1.208 1.000 16.353 0.000 0.885 1.127

The moderation effect of the facet-specific acceptance goal with the energy change score from T2 to T3 (ideal-personality) is not significantly different from zero, b = 0.007, p = 0.731.

6.7.7.6 Energy - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 7762.574 7872.043 0.927 0.054 0.068
# parameters of interest
params_lcs_energ_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_energ_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_energ_ideal_frequ_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("energ_t3 ~ energ_t2", "d_energ_1 =~ energ_t3", "energ_t2 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~ frequ", "frequ ~~ frequ", "energ_t2 ~ frequ", # frequency of self improvement
                           "d_energ_1 ~1 ", "energ_t2 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
Joining with `by = join_by(term)`
kable(params_lcs_energ_ideal_frequ_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
energ_t3 ~ energ_t2 1.000 1.000 1.000 0.958 NA NA 1.000 1.000
d_energ_1 =~ energ_t3 1.000 1.000 1.000 0.651 NA NA 1.000 1.000
d_energ_1 ~1 0.001 -0.068 0.071 0.008 0.065 0.949 -0.040 0.043
energ_t2 ~1 3.768 3.558 3.979 14.655 58.940 0.000 3.643 3.894
d_energ_1 ~~ d_energ_1 0.030 -0.048 0.107 0.981 1.269 0.204 -0.016 0.076
energ_t2 ~~ d_energ_1 -0.010 -0.047 0.027 -0.243 -0.892 0.372 -0.032 0.012
energ_t2 ~ frequ 0.132 -0.066 0.331 0.352 2.190 0.029 0.014 0.250
d_energ_1 ~ frequ -0.035 -0.145 0.075 -0.139 -1.058 0.290 -0.101 0.030
frequ ~~ frequ 0.469 0.205 0.732 1.000 5.846 0.000 0.311 0.626

The moderation effect of the frequency of self-acceptance behaviors with the energy change score from T2 to T3 (ideal-personality) is not significantly different from zero, b = -0.035, p = 0.29.

6.7.7.7 Compassion - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 6821.196 6905.122 0.976 0.036 0.04
# parameters of interest
params_lcs_compa_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_compa_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_compa_ideal_specif_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("compa_t3 ~ compa_t2", "d_compa_1 =~ compa_t3", "compa_t2 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~ sa07_04_t1", "sa07_04_t1 ~~ sa07_04_t1", "d_compa_1 ~ sa07_04_t1", # acceptance goals
                     "d_compa_1 ~1 ", "compa_t2 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
Joining with `by = join_by(term)`
kable(params_lcs_compa_ideal_specif_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
compa_t3 ~ compa_t2 1.000 1.000 1.000 0.986 NA NA 1.000 1.000
d_compa_1 =~ compa_t3 1.000 1.000 1.000 0.565 NA NA 1.000 1.000
d_compa_1 ~1 0.004 -0.136 0.144 0.011 0.094 0.925 -0.079 0.087
compa_t2 ~1 4.329 4.155 4.504 6.737 81.802 0.000 4.226 4.433
d_compa_1 ~~ d_compa_1 0.136 -0.061 0.332 1.000 2.272 0.023 0.019 0.252
compa_t2 ~~ d_compa_1 -0.063 -0.235 0.110 -0.269 -1.196 0.232 -0.165 0.040
d_compa_1 ~ sa07_04_t1 -0.005 -0.147 0.137 -0.014 -0.116 0.908 -0.090 0.079
sa07_04_t1 ~~ sa07_04_t1 0.995 0.795 1.195 1.000 16.389 0.000 0.876 1.114

The moderation effect of the facet-specific acceptance goal with the compassion change score from T2 to T3 (ideal-personality) is not significantly different from zero, b = -0.005, p = 0.908.

6.7.7.8 Compassion - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 8192.394 8301.863 0.979 0.033 0.043
# parameters of interest
params_lcs_compa_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_compa_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_compa_ideal_frequ_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("compa_t3 ~ compa_t2", "d_compa_1 =~ compa_t3", "compa_t2 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~ frequ", "frequ ~~ frequ", "compa_t2 ~ frequ", # frequency of self improvement
                           "d_compa_1 ~1 ", "compa_t2 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
Joining with `by = join_by(term)`
kable(params_lcs_compa_ideal_frequ_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
compa_t3 ~ compa_t2 1.000 1.000 1.000 0.989 NA NA 1.000 1.000
d_compa_1 =~ compa_t3 1.000 1.000 1.000 0.567 NA NA 1.000 1.000
d_compa_1 ~1 0.003 -0.137 0.143 0.008 0.071 0.943 -0.080 0.086
compa_t2 ~1 4.336 4.162 4.511 6.690 81.798 0.000 4.232 4.440
d_compa_1 ~~ d_compa_1 0.137 -0.062 0.336 0.991 2.260 0.024 0.018 0.255
compa_t2 ~~ d_compa_1 -0.061 -0.237 0.116 -0.256 -1.129 0.259 -0.166 0.045
compa_t2 ~ frequ 0.148 -0.089 0.385 0.159 2.062 0.039 0.007 0.290
d_compa_1 ~ frequ -0.052 -0.296 0.193 -0.096 -0.696 0.487 -0.197 0.094
frequ ~~ frequ 0.481 0.214 0.748 1.000 5.918 0.000 0.322 0.640

The moderation effect of the frequency of self-acceptance behaviors with the compassion change score from T2 to T3 (ideal-personality) is not significantly different from zero, b = -0.052, p = 0.487.

6.7.7.9 Respectfulness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 5293.527 5377.454 0.875 0.098 0.091
# parameters of interest
params_lcs_respe_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_respe_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_respe_ideal_specif_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("respe_t3 ~ respe_t2", "d_respe_1 =~ respe_t3", "respe_t2 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~ sa07_05_t1", "sa07_05_t1 ~~ sa07_05_t1", "d_respe_1 ~ sa07_05_t1", # acceptance goals
                     "d_respe_1 ~1 ", "respe_t2 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
Joining with `by = join_by(term)`
kable(params_lcs_respe_ideal_specif_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
respe_t3 ~ respe_t2 1.000 1.000 1.000 1.059 NA NA 1.000 1.000
d_respe_1 =~ respe_t3 1.000 1.000 1.000 0.423 NA NA 1.000 1.000
d_respe_1 ~1 -0.008 -0.071 0.054 -0.059 -0.448 0.654 -0.046 0.029
respe_t2 ~1 4.682 4.577 4.787 12.999 146.956 0.000 4.619 4.744
d_respe_1 ~~ d_respe_1 0.021 -0.027 0.068 0.991 1.426 0.154 -0.008 0.049
respe_t2 ~~ d_respe_1 -0.017 -0.050 0.017 -0.326 -1.640 0.101 -0.036 0.003
d_respe_1 ~ sa07_05_t1 0.013 -0.053 0.080 0.093 0.667 0.505 -0.026 0.053
sa07_05_t1 ~~ sa07_05_t1 0.994 0.701 1.287 1.000 11.166 0.000 0.819 1.168

The moderation effect of the facet-specific acceptance goal with the respectfulness change score from T2 to T3 (ideal-personality) is not significantly different from zero, b = 0.013, p = 0.505.

6.7.7.10 Respectfulness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 6652.44 6761.91 0.939 0.065 0.071
# parameters of interest
params_lcs_respe_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_respe_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_respe_ideal_frequ_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("respe_t3 ~ respe_t2", "d_respe_1 =~ respe_t3", "respe_t2 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~ frequ", "frequ ~~ frequ", "respe_t2 ~ frequ", # frequency of self improvement
                           "d_respe_1 ~1 ", "respe_t2 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
Joining with `by = join_by(term)`
kable(params_lcs_respe_ideal_frequ_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
respe_t3 ~ respe_t2 1.000 1.000 1.000 1.052 NA NA 1.000 1.000
d_respe_1 =~ respe_t3 1.000 1.000 1.000 0.425 NA NA 1.000 1.000
d_respe_1 ~1 -0.010 -0.068 0.049 -0.069 -0.537 0.591 -0.045 0.025
respe_t2 ~1 4.684 4.578 4.790 13.574 145.043 0.000 4.621 4.747
d_respe_1 ~~ d_respe_1 0.017 -0.024 0.058 0.884 1.370 0.171 -0.007 0.042
respe_t2 ~~ d_respe_1 -0.011 -0.042 0.020 -0.247 -1.137 0.256 -0.029 0.008
respe_t2 ~ frequ 0.142 0.019 0.266 0.286 3.793 0.000 0.069 0.216
d_respe_1 ~ frequ -0.068 -0.166 0.029 -0.341 -2.312 0.021 -0.126 -0.010
frequ ~~ frequ 0.483 0.218 0.748 1.000 5.999 0.000 0.325 0.641

The moderation effect of the frequency of self-acceptance behaviors with respectfulness change score from T2 to T3 (ideal-personality) is not significantly different from zero, b = -0.068, p = 0.021.

6.7.7.11 Trust - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 6623.743 6707.669 0.974 0.036 0.043
# parameters of interest
params_lcs_trust_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_trust_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_trust_ideal_specif_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("trust_t3 ~ trust_t2", "d_trust_1 =~ trust_t3", "trust_t2 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~ sa07_06_t1", "sa07_06_t1 ~~ sa07_06_t1", "d_trust_1 ~ sa07_06_t1", # acceptance goals
                     "d_trust_1 ~1 ", "trust_t2 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
Joining with `by = join_by(term)`
kable(params_lcs_trust_ideal_specif_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
trust_t3 ~ trust_t2 1.000 1.000 1.000 0.979 NA NA 1.000 1.000
d_trust_1 =~ trust_t3 1.000 1.000 1.000 0.480 NA NA 1.000 1.000
d_trust_1 ~1 -0.013 -0.101 0.075 -0.064 -0.470 0.638 -0.065 0.040
trust_t2 ~1 4.050 3.876 4.224 10.064 76.469 0.000 3.946 4.154
d_trust_1 ~~ d_trust_1 0.039 -0.046 0.124 0.998 1.501 0.133 -0.012 0.089
trust_t2 ~~ d_trust_1 -0.016 -0.068 0.037 -0.200 -0.993 0.321 -0.047 0.015
d_trust_1 ~ sa07_06_t1 -0.010 -0.104 0.085 -0.049 -0.341 0.733 -0.066 0.046
sa07_06_t1 ~~ sa07_06_t1 0.994 0.803 1.184 1.000 17.178 0.000 0.880 1.107

The moderation effect of the facet-specific acceptance goal with the trust change score from T2 to T3 (ideal-personality) is not significantly different from zero, b = -0.01, p = 0.733.

6.7.7.12 Trust - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 7974.869 8084.338 0.989 0.024 0.044
# parameters of interest
params_lcs_trust_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_trust_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_trust_ideal_frequ_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("trust_t3 ~ trust_t2", "d_trust_1 =~ trust_t3", "trust_t2 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~ frequ", "frequ ~~ frequ", "trust_t2 ~ frequ", # frequency of self improvement
                           "d_trust_1 ~1 ", "trust_t2 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
Joining with `by = join_by(term)`
kable(params_lcs_trust_ideal_frequ_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
trust_t3 ~ trust_t2 1.000 1.000 1.000 0.981 NA NA 1.000 1.000
d_trust_1 =~ trust_t3 1.000 1.000 1.000 0.476 NA NA 1.000 1.000
d_trust_1 ~1 -0.012 -0.096 0.073 -0.061 -0.449 0.654 -0.062 0.039
trust_t2 ~1 4.049 3.875 4.224 10.476 76.522 0.000 3.946 4.153
d_trust_1 ~~ d_trust_1 0.033 -0.045 0.111 0.939 1.400 0.162 -0.013 0.079
trust_t2 ~~ d_trust_1 -0.009 -0.054 0.037 -0.131 -0.623 0.533 -0.036 0.019
trust_t2 ~ frequ 0.186 -0.003 0.375 0.335 3.240 0.001 0.073 0.298
d_trust_1 ~ frequ -0.066 -0.204 0.071 -0.246 -1.590 0.112 -0.148 0.015
frequ ~~ frequ 0.484 0.218 0.750 1.000 5.990 0.000 0.325 0.642

The moderation effect of the frequency of self-acceptance behaviors with the trust change score from T2 to T3 (ideal-personality) is not significantly different from zero (at p < .001), b = -0.066, p = 0.112.

6.7.7.13 Organization - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 5717.579 5801.505 0.901 0.068 0.076
# parameters of interest
params_lcs_organ_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_organ_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_organ_ideal_specif_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("organ_t3 ~ organ_t2", "d_organ_1 =~ organ_t3", "organ_t2 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~ sa07_07_t1", "sa07_07_t1 ~~ sa07_07_t1", "d_organ_1 ~ sa07_07_t1", # acceptance goals
                     "d_organ_1 ~1 ", "organ_t2 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
Joining with `by = join_by(term)`
kable(params_lcs_organ_ideal_specif_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
organ_t3 ~ organ_t2 1.000 1.000 1.000 1.011 NA NA 1.000 1.000
d_organ_1 =~ organ_t3 1.000 1.000 1.000 0.588 NA NA 1.000 1.000
d_organ_1 ~1 0.003 -0.100 0.106 0.011 0.090 0.928 -0.058 0.064
organ_t2 ~1 4.334 4.161 4.506 9.593 82.705 0.000 4.231 4.436
d_organ_1 ~~ d_organ_1 0.069 -0.052 0.190 0.997 1.871 0.061 -0.003 0.141
organ_t2 ~~ d_organ_1 -0.036 -0.125 0.053 -0.306 -1.330 0.184 -0.089 0.017
d_organ_1 ~ sa07_07_t1 0.015 -0.089 0.118 0.056 0.463 0.644 -0.047 0.076
sa07_07_t1 ~~ sa07_07_t1 1.012 0.850 1.174 1.000 20.565 0.000 0.916 1.109

The moderation effect of the facet-specific acceptance goal with the organization change score from T2 to T3 (ideal-personality) is not significantly different from zero, b = 0.015, p = 0.644.

6.7.7.14 Organization - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 7075.562 7185.031 0.943 0.053 0.066
# parameters of interest
params_lcs_organ_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_organ_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_organ_ideal_frequ_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("organ_t3 ~ organ_t2", "d_organ_1 =~ organ_t3", "organ_t2 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~ frequ", "frequ ~~ frequ", "organ_t2 ~ frequ", # frequency of self improvement
                           "d_organ_1 ~1 ", "organ_t2 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
Joining with `by = join_by(term)`
kable(params_lcs_organ_ideal_frequ_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
organ_t3 ~ organ_t2 1.000 1.000 1.000 1.013 NA NA 1.000 1.000
d_organ_1 =~ organ_t3 1.000 1.000 1.000 0.590 NA NA 1.000 1.000
d_organ_1 ~1 0.003 -0.099 0.105 0.012 0.100 0.920 -0.058 0.064
organ_t2 ~1 4.334 4.161 4.507 9.633 82.324 0.000 4.231 4.437
d_organ_1 ~~ d_organ_1 0.068 -0.052 0.188 0.987 1.855 0.064 -0.004 0.139
organ_t2 ~~ d_organ_1 -0.034 -0.120 0.052 -0.297 -1.308 0.191 -0.085 0.017
organ_t2 ~ frequ 0.135 -0.066 0.336 0.208 2.206 0.027 0.015 0.255
d_organ_1 ~ frequ -0.043 -0.201 0.114 -0.115 -0.905 0.365 -0.137 0.051
frequ ~~ frequ 0.481 0.216 0.745 1.000 5.979 0.000 0.323 0.638

The moderation effect of the frequency of self-acceptance behaviors with the organization change score from T2 to T3 (ideal-personality) is not significantly different from zero, b = -0.043, p = 0.365.

6.7.7.15 Productiveness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 5066.524 5150.45 0.924 0.068 0.06
# parameters of interest
params_lcs_produ_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_produ_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_produ_ideal_specif_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("produ_t3 ~ produ_t2", "d_produ_1 =~ produ_t3", "produ_t2 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~ sa07_08_t1", "sa07_08_t1 ~~ sa07_08_t1", "d_produ_1 ~ sa07_08_t1", # acceptance goals
                     "d_produ_1 ~1 ", "produ_t2 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
Joining with `by = join_by(term)`
kable(params_lcs_produ_ideal_specif_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
produ_t3 ~ produ_t2 1.000 1.000 1.000 0.933 NA NA 1.000 1.000
d_produ_1 =~ produ_t3 1.000 1.000 1.000 0.589 NA NA 1.000 1.000
d_produ_1 ~1 -0.053 -0.144 0.038 -0.221 -1.928 0.054 -0.108 0.001
produ_t2 ~1 4.493 4.366 4.621 11.721 116.083 0.000 4.417 4.569
d_produ_1 ~~ d_produ_1 0.058 -0.034 0.150 0.998 2.087 0.037 0.004 0.113
produ_t2 ~~ d_produ_1 -0.018 -0.074 0.038 -0.194 -1.042 0.297 -0.051 0.016
d_produ_1 ~ sa07_08_t1 0.010 -0.066 0.086 0.042 0.437 0.662 -0.035 0.055
sa07_08_t1 ~~ sa07_08_t1 1.031 0.848 1.215 1.000 18.494 0.000 0.922 1.141

The moderation effect of the facet-specific acceptance goal with the productiveness change score from T2 to T3 (ideal-personality) is not significantly different from zero, b = 0.01, p = 0.662.

6.7.7.16 Productiveness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 6415.912 6525.381 0.934 0.063 0.06
# parameters of interest
params_lcs_produ_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_produ_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_produ_ideal_frequ_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("produ_t3 ~ produ_t2", "d_produ_1 =~ produ_t3", "produ_t2 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~ frequ", "frequ ~~ frequ", "produ_t2 ~ frequ", # frequency of self improvement
                           "d_produ_1 ~1 ", "produ_t2 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
Joining with `by = join_by(term)`
kable(params_lcs_produ_ideal_frequ_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
produ_t3 ~ produ_t2 1.000 1.000 1.000 0.933 NA NA 1.000 1.000
d_produ_1 =~ produ_t3 1.000 1.000 1.000 0.588 NA NA 1.000 1.000
d_produ_1 ~1 -0.055 -0.146 0.036 -0.225 -1.976 0.048 -0.109 0.000
produ_t2 ~1 4.496 4.368 4.623 11.624 116.161 0.000 4.420 4.572
d_produ_1 ~~ d_produ_1 0.058 -0.035 0.150 0.973 2.055 0.040 0.003 0.113
produ_t2 ~~ d_produ_1 -0.014 -0.073 0.044 -0.161 -0.812 0.417 -0.049 0.020
produ_t2 ~ frequ 0.149 -0.019 0.317 0.265 2.917 0.004 0.049 0.249
d_produ_1 ~ frequ -0.058 -0.194 0.078 -0.164 -1.404 0.160 -0.139 0.023
frequ ~~ frequ 0.471 0.207 0.735 1.000 5.863 0.000 0.314 0.628

The moderation effect of the frequency of self-acceptance behaviors with the productiveness change score from T2 to T3 (ideal-personality) is not significantly different from zero (at p < .001), b = -0.058, p = 0.16.

6.7.7.17 Responsibility - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 5995.099 6079.026 0.947 0.054 0.052
# parameters of interest
params_lcs_respo_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_respo_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_respo_ideal_specif_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("respo_t3 ~ respo_t2", "d_respo_1 =~ respo_t3", "respo_t2 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~ sa07_09_t1", "sa07_09_t1 ~~ sa07_09_t1", "d_respo_1 ~ sa07_09_t1", # acceptance goals
                     "d_respo_1 ~1 ", "respo_t2 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
Joining with `by = join_by(term)`
kable(params_lcs_respo_ideal_specif_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
respo_t3 ~ respo_t2 1.000 1.000 1.000 0.991 NA NA 1.000 1.000
d_respo_1 =~ respo_t3 1.000 1.000 1.000 0.380 NA NA 1.000 1.000
d_respo_1 ~1 0.001 -0.100 0.102 0.004 0.024 0.981 -0.059 0.061
respo_t2 ~1 4.325 4.146 4.503 8.636 79.824 0.000 4.218 4.431
d_respo_1 ~~ d_respo_1 0.036 -0.059 0.131 0.987 1.256 0.209 -0.020 0.093
respo_t2 ~~ d_respo_1 -0.017 -0.089 0.054 -0.184 -0.799 0.424 -0.060 0.025
d_respo_1 ~ sa07_09_t1 -0.022 -0.127 0.084 -0.115 -0.682 0.495 -0.085 0.041
sa07_09_t1 ~~ sa07_09_t1 1.023 0.834 1.212 1.000 17.822 0.000 0.910 1.135

The moderation effect of the facet-specific acceptance goal with the responsibility change score from T2 to T3 (ideal-personality) is not significantly different from zero, b = -0.022, p = 0.495.

6.7.7.18 Responsibility - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 7348 7457.469 0.96 0.048 0.052
# parameters of interest
params_lcs_respo_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_respo_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_respo_ideal_frequ_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("respo_t3 ~ respo_t2", "d_respo_1 =~ respo_t3", "respo_t2 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~ frequ", "frequ ~~ frequ", "respo_t2 ~ frequ", # frequency of self improvement
                           "d_respo_1 ~1 ", "respo_t2 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
Joining with `by = join_by(term)`
kable(params_lcs_respo_ideal_frequ_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
respo_t3 ~ respo_t2 1.000 1.000 1.000 0.990 NA NA 1.000 1.000
d_respo_1 =~ respo_t3 1.000 1.000 1.000 0.379 NA NA 1.000 1.000
d_respo_1 ~1 0.001 -0.101 0.102 0.003 0.017 0.987 -0.060 0.061
respo_t2 ~1 4.326 4.148 4.504 8.609 79.971 0.000 4.220 4.432
d_respo_1 ~~ d_respo_1 0.031 -0.065 0.127 0.850 1.077 0.282 -0.026 0.089
respo_t2 ~~ d_respo_1 -0.006 -0.082 0.069 -0.071 -0.267 0.789 -0.051 0.039
respo_t2 ~ frequ 0.189 -0.031 0.409 0.260 2.821 0.005 0.058 0.320
d_respo_1 ~ frequ -0.108 -0.286 0.071 -0.387 -1.985 0.047 -0.214 -0.001
frequ ~~ frequ 0.478 0.214 0.743 1.000 5.948 0.000 0.321 0.636

The moderation effect of the frequency of self-acceptance behaviors with the responsibility change score from T2 to T3 (ideal-personality) is not significantly different from zero (at p < .001), b = -0.108, p = 0.047.

6.7.7.19 Anxiety - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 6633.03 6716.956 0.943 0.044 0.055
# parameters of interest
params_lcs_anxie_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_anxie_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_anxie_ideal_specif_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("anxie_t3 ~ anxie_t2", "d_anxie_1 =~ anxie_t3", "anxie_t2 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~ sa07_10_t1", "sa07_10_t1 ~~ sa07_10_t1", "d_anxie_1 ~ sa07_10_t1", # acceptance goals
                     "d_anxie_1 ~1 ", "anxie_t2 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
Joining with `by = join_by(term)`
kable(params_lcs_anxie_ideal_specif_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
anxie_t3 ~ anxie_t2 1.000 1.000 1.000 0.915 NA NA 1.000 1.000
d_anxie_1 =~ anxie_t3 1.000 1.000 1.000 0.159 NA NA 1.000 1.000
d_anxie_1 ~1 0.017 -0.039 0.074 0.433 1.005 0.315 -0.016 0.051
anxie_t2 ~1 1.430 1.307 1.553 6.233 38.231 0.000 1.357 1.504
d_anxie_1 ~~ d_anxie_1 0.001 -0.032 0.033 0.387 0.062 0.950 -0.019 0.020
anxie_t2 ~~ d_anxie_1 0.005 -0.021 0.030 0.807 0.590 0.555 -0.011 0.020
d_anxie_1 ~ sa07_10_t1 -0.031 -0.088 0.026 -0.783 -1.781 0.075 -0.065 0.003
sa07_10_t1 ~~ sa07_10_t1 1.013 0.842 1.185 1.000 19.408 0.000 0.911 1.116

The moderation effect of the facet-specific acceptance goal with the anxiety change score from T2 to T3 (ideal-personality) is not significantly different from zero, b = -0.031, p = 0.075.

6.7.7.20 Anxiety - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 7997.019 8106.488 0.984 0.025 0.051
# parameters of interest
params_lcs_anxie_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_anxie_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_anxie_ideal_frequ_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("anxie_t3 ~ anxie_t2", "d_anxie_1 =~ anxie_t3", "anxie_t2 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~ frequ", "frequ ~~ frequ", "anxie_t2 ~ frequ", # frequency of self improvement
                           "d_anxie_1 ~1 ", "anxie_t2 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
Joining with `by = join_by(term)`
kable(params_lcs_anxie_ideal_frequ_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
anxie_t3 ~ anxie_t2 1.000 1.000 1.000 0.915 NA NA 1.000 1.000
d_anxie_1 =~ anxie_t3 1.000 1.000 1.000 0.153 NA NA 1.000 1.000
d_anxie_1 ~1 0.017 -0.041 0.075 0.433 0.964 0.335 -0.018 0.051
anxie_t2 ~1 1.430 1.307 1.553 6.115 38.208 0.000 1.357 1.504
d_anxie_1 ~~ d_anxie_1 0.001 -0.033 0.035 0.725 0.107 0.915 -0.019 0.021
anxie_t2 ~~ d_anxie_1 0.005 -0.022 0.033 0.648 0.602 0.547 -0.011 0.021
anxie_t2 ~ frequ -0.032 -0.142 0.078 -0.095 -0.956 0.339 -0.097 0.033
d_anxie_1 ~ frequ 0.029 -0.081 0.140 0.524 0.881 0.378 -0.036 0.095
frequ ~~ frequ 0.483 0.217 0.748 1.000 5.986 0.000 0.325 0.641

The moderation effect of the frequency of self-acceptance behaviors with the anxiety change score from T2 to T3 (ideal-personality) is not significantly different from zero, b = 0.029, p = 0.378.

6.7.7.21 Depression - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 5153.772 5237.699 0.883 0.077 0.07
# parameters of interest
params_lcs_depre_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_depre_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_depre_ideal_specif_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("depre_t3 ~ depre_t2", "d_depre_1 =~ depre_t3", "depre_t2 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~ sa07_11_t1", "sa07_11_t1 ~~ sa07_11_t1", "d_depre_1 ~ sa07_11_t1", # acceptance goals
                     "d_depre_1 ~1 ", "depre_t2 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
Joining with `by = join_by(term)`
kable(params_lcs_depre_ideal_specif_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
depre_t3 ~ depre_t2 1.000 1.000 1.000 1.029 NA NA 1.000 1.000
d_depre_1 =~ depre_t3 1.000 1.000 1.000 0.519 NA NA 1.000 1.000
d_depre_1 ~1 -0.027 -0.101 0.048 -0.155 -1.168 0.243 -0.071 0.018
depre_t2 ~1 1.558 1.429 1.687 4.594 39.722 0.000 1.481 1.635
d_depre_1 ~~ d_depre_1 0.029 -0.032 0.090 0.985 1.553 0.120 -0.008 0.065
depre_t2 ~~ d_depre_1 -0.018 -0.066 0.030 -0.317 -1.255 0.209 -0.047 0.010
d_depre_1 ~ sa07_11_t1 0.021 -0.047 0.089 0.121 1.005 0.315 -0.020 0.061
sa07_11_t1 ~~ sa07_11_t1 1.002 0.837 1.167 1.000 19.977 0.000 0.904 1.100

The moderation effect of the facet-specific acceptance goal with the depression change score from T2 to T3 (ideal-personality) is not significantly different from zero, b = 0.021, p = 0.315.

6.7.7.22 Depression - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 6517.44 6626.909 0.914 0.068 0.068
# parameters of interest
params_lcs_depre_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_depre_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_depre_ideal_frequ_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("depre_t3 ~ depre_t2", "d_depre_1 =~ depre_t3", "depre_t2 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~ frequ", "frequ ~~ frequ", "depre_t2 ~ frequ", # frequency of self improvement
                           "d_depre_1 ~1 ", "depre_t2 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
Joining with `by = join_by(term)`
kable(params_lcs_depre_ideal_frequ_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
depre_t3 ~ depre_t2 1.000 1.000 1.000 1.032 NA NA 1.000 1.000
d_depre_1 =~ depre_t3 1.000 1.000 1.000 0.520 NA NA 1.000 1.000
d_depre_1 ~1 -0.026 -0.104 0.051 -0.149 -1.115 0.265 -0.072 0.020
depre_t2 ~1 1.559 1.430 1.688 4.465 39.689 0.000 1.482 1.636
d_depre_1 ~~ d_depre_1 0.029 -0.036 0.094 0.945 1.480 0.139 -0.009 0.068
depre_t2 ~~ d_depre_1 -0.017 -0.068 0.033 -0.288 -1.110 0.267 -0.047 0.013
depre_t2 ~ frequ -0.074 -0.221 0.072 -0.147 -1.669 0.095 -0.162 0.013
d_depre_1 ~ frequ 0.060 -0.055 0.174 0.235 1.716 0.086 -0.008 0.128
frequ ~~ frequ 0.478 0.214 0.742 1.000 5.960 0.000 0.321 0.635

The moderation effect of the frequency of self-acceptance behaviors with the depression change score from T2 to T3 (ideal-personality) is not significantly different from zero, b = 0.06, p = 0.086.

6.7.7.23 Volatility - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 6133.224 6217.15 0.97 0.037 0.047
# parameters of interest
params_lcs_volat_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_volat_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_volat_ideal_specif_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("volat_t3 ~ volat_t2", "d_volat_1 =~ volat_t3", "volat_t2 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~ sa07_12_t1", "sa07_12_t1 ~~ sa07_12_t1", "d_volat_1 ~ sa07_12_t1", # acceptance goals
                     "d_volat_1 ~1 ", "volat_t2 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
Joining with `by = join_by(term)`
kable(params_lcs_volat_ideal_specif_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
volat_t3 ~ volat_t2 1.000 1.000 1.000 1.016 NA NA 1.000 1.000
d_volat_1 =~ volat_t3 1.000 1.000 1.000 0.388 NA NA 1.000 1.000
d_volat_1 ~1 0.050 -0.040 0.141 0.297 1.828 0.068 -0.004 0.104
volat_t2 ~1 1.618 1.469 1.766 3.640 35.883 0.000 1.529 1.706
d_volat_1 ~~ d_volat_1 0.029 -0.050 0.108 1.000 1.198 0.231 -0.018 0.076
volat_t2 ~~ d_volat_1 -0.018 -0.074 0.038 -0.235 -1.035 0.301 -0.051 0.016
d_volat_1 ~ sa07_12_t1 0.003 -0.082 0.088 0.019 0.121 0.904 -0.047 0.054
sa07_12_t1 ~~ sa07_12_t1 1.039 0.847 1.230 1.000 17.813 0.000 0.924 1.153

The moderation effect of the facet-specific acceptance goal with the volatility change score from T2 to T3 (ideal-personality) is not significantly different from zero, b = 0.003, p = 0.904.

6.7.7.24 Volatility - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 7483.796 7593.265 0.964 0.043 0.05
# parameters of interest
params_lcs_volat_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_volat_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_volat_ideal_frequ_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("volat_t3 ~ volat_t2", "d_volat_1 =~ volat_t3", "volat_t2 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~ frequ", "frequ ~~ frequ", "volat_t2 ~ frequ", # frequency of self improvement
                           "d_volat_1 ~1 ", "volat_t2 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
Joining with `by = join_by(term)`
kable(params_lcs_volat_ideal_frequ_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
volat_t3 ~ volat_t2 1.000 1.000 1.000 1.016 NA NA 1.000 1.000
d_volat_1 =~ volat_t3 1.000 1.000 1.000 0.385 NA NA 1.000 1.000
d_volat_1 ~1 0.050 -0.040 0.140 0.299 1.828 0.068 -0.004 0.104
volat_t2 ~1 1.618 1.469 1.767 3.656 35.758 0.000 1.529 1.706
d_volat_1 ~~ d_volat_1 0.027 -0.051 0.106 0.962 1.136 0.256 -0.020 0.074
volat_t2 ~~ d_volat_1 -0.014 -0.069 0.041 -0.197 -0.837 0.403 -0.047 0.019
volat_t2 ~ frequ -0.138 -0.311 0.036 -0.216 -2.614 0.009 -0.241 -0.034
d_volat_1 ~ frequ 0.047 -0.113 0.207 0.194 0.968 0.333 -0.048 0.142
frequ ~~ frequ 0.479 0.215 0.744 1.000 5.960 0.000 0.322 0.637

The moderation effect of the frequency of self-acceptance behaviors with the volatility change score from T2 to T3 (ideal-personality) is not significantly different from zero, b = 0.047, p = 0.333.

6.7.7.25 Curiosity - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 6537.691 6621.617 0.966 0.038 0.049
# parameters of interest
params_lcs_curio_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_curio_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_curio_ideal_specif_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("curio_t3 ~ curio_t2", "d_curio_1 =~ curio_t3", "curio_t2 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~ sa07_13_t1", "sa07_13_t1 ~~ sa07_13_t1", "d_curio_1 ~ sa07_13_t1", # acceptance goals
                     "d_curio_1 ~1 ", "curio_t2 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
Joining with `by = join_by(term)`
kable(params_lcs_curio_ideal_specif_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
curio_t3 ~ curio_t2 1.000 1.000 1.000 0.909 NA NA 1.000 1.000
d_curio_1 =~ curio_t3 1.000 1.000 1.000 0.533 NA NA 1.000 1.000
d_curio_1 ~1 -0.013 -0.114 0.088 -0.054 -0.421 0.674 -0.073 0.047
curio_t2 ~1 4.490 4.370 4.610 11.119 122.684 0.000 4.418 4.562
d_curio_1 ~~ d_curio_1 0.056 -0.046 0.158 0.996 1.801 0.072 -0.005 0.117
curio_t2 ~~ d_curio_1 -0.010 -0.076 0.057 -0.102 -0.476 0.634 -0.049 0.030
d_curio_1 ~ sa07_13_t1 0.015 -0.083 0.113 0.064 0.505 0.613 -0.043 0.073
sa07_13_t1 ~~ sa07_13_t1 1.019 0.810 1.228 1.000 16.041 0.000 0.895 1.144

The moderation effect of the facet-specific acceptance goal with the curiosity change score from T2 to T3 (ideal-personality) is not significantly different from zero, b = 0.015, p = 0.613.

6.7.7.26 Curiosity - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 7900.779 8010.248 0.99 0.022 0.046
# parameters of interest
params_lcs_curio_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_curio_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_curio_ideal_frequ_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("curio_t3 ~ curio_t2", "d_curio_1 =~ curio_t3", "curio_t2 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~ frequ", "frequ ~~ frequ", "curio_t2 ~ frequ", # frequency of self improvement
                           "d_curio_1 ~1 ", "curio_t2 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
Joining with `by = join_by(term)`
kable(params_lcs_curio_ideal_frequ_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
curio_t3 ~ curio_t2 1.000 1.000 1.000 0.914 NA NA 1.000 1.000
d_curio_1 =~ curio_t3 1.000 1.000 1.000 0.541 NA NA 1.000 1.000
d_curio_1 ~1 -0.011 -0.111 0.089 -0.047 -0.369 0.712 -0.071 0.048
curio_t2 ~1 4.489 4.367 4.612 11.231 120.617 0.000 4.416 4.562
d_curio_1 ~~ d_curio_1 0.054 -0.047 0.155 0.967 1.764 0.078 -0.006 0.114
curio_t2 ~~ d_curio_1 -0.014 -0.081 0.053 -0.152 -0.691 0.489 -0.054 0.026
curio_t2 ~ frequ 0.059 -0.115 0.233 0.103 1.113 0.266 -0.045 0.162
d_curio_1 ~ frequ 0.062 -0.099 0.223 0.183 1.267 0.205 -0.034 0.158
frequ ~~ frequ 0.486 0.221 0.751 1.000 6.038 0.000 0.328 0.644

The moderation effect of the frequency of self-acceptance behaviors with the curiosity change score from T2 to T3 (ideal-personality) is not significantly different from zero, b = 0.062, p = 0.205.

6.7.7.27 Aesthetic - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 6535.965 6619.892 1 0 0.036
# parameters of interest
params_lcs_aesth_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_aesth_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_aesth_ideal_specif_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("aesth_t3 ~ aesth_t2", "d_aesth_1 =~ aesth_t3", "aesth_t2 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~ sa07_14_t1", "sa07_14_t1 ~~ sa07_14_t1", "d_aesth_1 ~ sa07_14_t1", # acceptance goals
                     "d_aesth_1 ~1 ", "aesth_t2 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
Joining with `by = join_by(term)`
kable(params_lcs_aesth_ideal_specif_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
aesth_t3 ~ aesth_t2 1.000 1.000 1.000 0.950 NA NA 1.000 1.000
d_aesth_1 =~ aesth_t3 1.000 1.000 1.000 0.575 NA NA 1.000 1.000
d_aesth_1 ~1 -0.009 -0.062 0.044 -0.056 -0.569 0.569 -0.041 0.022
aesth_t2 ~1 3.297 3.041 3.553 12.291 42.341 0.000 3.144 3.449
d_aesth_1 ~~ d_aesth_1 0.026 -0.023 0.075 0.988 1.740 0.082 -0.003 0.055
aesth_t2 ~~ d_aesth_1 -0.010 -0.035 0.014 -0.244 -1.388 0.165 -0.025 0.004
d_aesth_1 ~ sa07_14_t1 -0.017 -0.073 0.038 -0.109 -1.047 0.295 -0.050 0.015
sa07_14_t1 ~~ sa07_14_t1 1.019 0.856 1.182 1.000 20.596 0.000 0.922 1.116

The moderation effect of the facet-specific acceptance goal with the aesthetic change score from T2 to T3 (ideal-personality) is not significantly different from zero, b = -0.017, p = 0.295.

6.7.7.28 Aesthetic - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 7897.198 8006.668 0.987 0.03 0.044
# parameters of interest
params_lcs_aesth_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_aesth_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_aesth_ideal_frequ_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("aesth_t3 ~ aesth_t2", "d_aesth_1 =~ aesth_t3", "aesth_t2 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~ frequ", "frequ ~~ frequ", "aesth_t2 ~ frequ", # frequency of self improvement
                           "d_aesth_1 ~1 ", "aesth_t2 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
Joining with `by = join_by(term)`
kable(params_lcs_aesth_ideal_frequ_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
aesth_t3 ~ aesth_t2 1.000 1.000 1.000 0.950 NA NA 1.000 1.000
d_aesth_1 =~ aesth_t3 1.000 1.000 1.000 0.577 NA NA 1.000 1.000
d_aesth_1 ~1 -0.009 -0.062 0.044 -0.056 -0.563 0.573 -0.040 0.022
aesth_t2 ~1 3.298 3.040 3.555 12.484 42.124 0.000 3.144 3.451
d_aesth_1 ~~ d_aesth_1 0.026 -0.023 0.075 0.994 1.717 0.086 -0.004 0.055
aesth_t2 ~~ d_aesth_1 -0.008 -0.030 0.014 -0.201 -1.204 0.229 -0.021 0.005
aesth_t2 ~ frequ 0.111 -0.030 0.253 0.291 2.594 0.009 0.027 0.195
d_aesth_1 ~ frequ -0.019 -0.103 0.066 -0.080 -0.729 0.466 -0.069 0.032
frequ ~~ frequ 0.475 0.210 0.740 1.000 5.905 0.000 0.318 0.633

The moderation effect of the frequency of self-acceptance behaviors with the aesthetic change score from T2 to T3 (ideal-personality) is not significantly different from zero, b = -0.019, p = 0.466.

6.7.7.29 Imagination - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_specif_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 23 6155.656 6239.582 0.934 0.056 0.063
# parameters of interest
params_lcs_imagi_ideal_specif_hyp7_fu <- broom::tidy(fit_mi_lcs_imagi_ideal_specif_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_imagi_ideal_specif_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("imagi_t3 ~ imagi_t2", "d_imagi_1 =~ imagi_t3", "imagi_t2 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~ sa07_15_t1", "sa07_15_t1 ~~ sa07_15_t1", "d_imagi_1 ~ sa07_15_t1", # acceptance goals
                     "d_imagi_1 ~1 ", "imagi_t2 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
Joining with `by = join_by(term)`
kable(params_lcs_imagi_ideal_specif_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
imagi_t3 ~ imagi_t2 1.000 1.000 1.000 0.944 NA NA 1.000 1.000
d_imagi_1 =~ imagi_t3 1.000 1.000 1.000 0.481 NA NA 1.000 1.000
d_imagi_1 ~1 0.034 -0.078 0.146 0.142 1.007 0.314 -0.032 0.101
imagi_t2 ~1 4.512 4.378 4.647 9.559 110.495 0.000 4.432 4.592
d_imagi_1 ~~ d_imagi_1 0.057 -0.056 0.170 0.980 1.655 0.098 -0.010 0.124
imagi_t2 ~~ d_imagi_1 -0.012 -0.109 0.086 -0.107 -0.394 0.693 -0.070 0.046
d_imagi_1 ~ sa07_15_t1 0.033 -0.073 0.140 0.140 1.030 0.303 -0.030 0.097
sa07_15_t1 ~~ sa07_15_t1 1.019 0.867 1.171 1.000 22.048 0.000 0.928 1.109

The moderation effect of the facet-specific acceptance goal with the imagination change score from T2 to T3 (ideal-personality) is not significantly different from zero, b = 0.033, p = 0.303.

6.7.7.30 Imagination - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_frequ_hyp7_fu) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
284 30 7523.08 7632.549 0.976 0.034 0.052
# parameters of interest
params_lcs_imagi_ideal_frequ_hyp7_fu <- broom::tidy(fit_mi_lcs_imagi_ideal_frequ_hyp7_fu, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_imagi_ideal_frequ_hyp7_fu,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("imagi_t3 ~ imagi_t2", "d_imagi_1 =~ imagi_t3", "imagi_t2 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~ frequ", "frequ ~~ frequ", "imagi_t2 ~ frequ", # frequency of self improvement
                           "d_imagi_1 ~1 ", "imagi_t2 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
Joining with `by = join_by(term)`
kable(params_lcs_imagi_ideal_frequ_hyp7_fu, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
imagi_t3 ~ imagi_t2 1.000 1.000 1.000 0.942 NA NA 1.000 1.000
d_imagi_1 =~ imagi_t3 1.000 1.000 1.000 0.482 NA NA 1.000 1.000
d_imagi_1 ~1 0.034 -0.079 0.147 0.140 0.991 0.322 -0.033 0.101
imagi_t2 ~1 4.514 4.379 4.649 9.520 110.076 0.000 4.434 4.594
d_imagi_1 ~~ d_imagi_1 0.059 -0.059 0.177 1.000 1.641 0.101 -0.011 0.129
imagi_t2 ~~ d_imagi_1 -0.015 -0.120 0.089 -0.135 -0.482 0.630 -0.078 0.047
imagi_t2 ~ frequ 0.097 -0.073 0.267 0.142 1.872 0.061 -0.005 0.198
d_imagi_1 ~ frequ 0.005 -0.176 0.185 0.013 0.084 0.933 -0.103 0.112
frequ ~~ frequ 0.480 0.215 0.744 1.000 5.970 0.000 0.322 0.637

The moderation effect of the frequency of self-acceptance behaviors with the imagination change score from T2 to T3 (ideal-personality) is not significantly different from zero, b = 0.005, p = 0.933.

6.7.8 Big Five facets (current personality)

6.7.8.1 Sociability - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7723.128 7810.922 0.961 0.073 0.042
# parameters of interest
params_lcs_socia_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_socia_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_socia_curr_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~ sa07_01_t1", "sa07_01_t1 ~~ sa07_01_t1", "d_socia_1 ~ sa07_01_t1", # acceptance goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
Joining with `by = join_by(term)`
kable(params_lcs_socia_curr_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.076 NA NA 1.000 1.000
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.479 NA NA 1.000 1.000
d_socia_1 ~1 0.163 0.023 0.302 0.369 3.831 0.000 0.079 0.246
socia_t1 ~1 2.857 2.651 3.063 2.890 45.641 0.000 2.734 2.980
d_socia_1 ~~ d_socia_1 0.187 0.039 0.335 0.967 4.169 0.000 0.099 0.276
socia_t1 ~~ d_socia_1 -0.124 -0.231 -0.017 -0.334 -3.805 0.000 -0.188 -0.060
d_socia_1 ~ sa07_01_t1 0.081 -0.040 0.201 0.183 2.207 0.027 0.009 0.152
sa07_01_t1 ~~ sa07_01_t1 0.997 0.821 1.173 1.000 18.622 0.000 0.892 1.102

The moderation effect of the facet-specific acceptance goal with the sociability change score (current-personality) is not significantly different from zero (at p < .001), b = 0.081, p = 0.027.

6.7.8.2 Sociability - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9022.657 9137.171 0.963 0.061 0.043
# parameters of interest
params_lcs_socia_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_socia_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_socia_curr_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~ frequ", "frequ ~~ frequ", "socia_t1 ~ frequ", # frequency of self improvement
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
Joining with `by = join_by(term)`
kable(params_lcs_socia_curr_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.076 NA NA 1.000 1.000
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.478 NA NA 1.000 1.000
d_socia_1 ~1 0.161 0.021 0.300 0.368 3.797 0.000 0.078 0.243
socia_t1 ~1 2.858 2.633 3.084 2.917 41.743 0.000 2.724 2.992
d_socia_1 ~~ d_socia_1 0.189 0.040 0.339 0.998 4.181 0.000 0.101 0.278
socia_t1 ~~ d_socia_1 -0.160 -0.286 -0.034 -0.375 -4.166 0.000 -0.235 -0.085
socia_t1 ~ frequ 0.031 -0.340 0.402 0.022 0.275 0.783 -0.190 0.252
d_socia_1 ~ frequ -0.026 -0.259 0.207 -0.042 -0.374 0.709 -0.165 0.112
frequ ~~ frequ 0.485 0.219 0.750 1.000 6.013 0.000 0.327 0.643

The moderation effect of the frequency of self-acceptance behaviors with sociability change score (current-personality) is not significantly different from zero, b = -0.026, p = 0.709.

6.7.8.3 Assertiveness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7889.858 7977.652 0.983 0.041 0.039
# parameters of interest
params_lcs_asser_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_asser_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_asser_curr_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~ sa07_02_t1", "sa07_02_t1 ~~ sa07_02_t1", "d_asser_1 ~ sa07_02_t1", # acceptance goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
Joining with `by = join_by(term)`
kable(params_lcs_asser_curr_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.003 NA NA 1.000 1.000
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.372 NA NA 1.000 1.000
d_asser_1 ~1 0.060 -0.041 0.160 0.219 1.960 0.050 0.000 0.120
asser_t1 ~1 3.102 2.912 3.292 4.210 53.756 0.000 2.989 3.215
d_asser_1 ~~ d_asser_1 0.073 -0.018 0.164 0.982 2.652 0.008 0.019 0.127
asser_t1 ~~ d_asser_1 -0.030 -0.104 0.043 -0.161 -1.363 0.173 -0.074 0.013
d_asser_1 ~ sa07_02_t1 0.037 -0.061 0.134 0.135 1.245 0.213 -0.021 0.095
sa07_02_t1 ~~ sa07_02_t1 0.997 0.831 1.163 1.000 19.717 0.000 0.898 1.096

The moderation effect of the facet-specific acceptance goal with the assertiveness change score (current-personality) is not significantly different from zero, b = 0.037, p = 0.213.

6.7.8.4 Assertiveness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9129.361 9243.874 0.988 0.031 0.042
# parameters of interest
params_lcs_asser_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_asser_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_asser_curr_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~ frequ", "frequ ~~ frequ", "asser_t1 ~ frequ", # frequency of self improvement
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
Joining with `by = join_by(term)`
kable(params_lcs_asser_curr_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.996 NA NA 1.000 1.000
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.369 NA NA 1.000 1.000
d_asser_1 ~1 0.054 -0.041 0.150 0.208 1.875 0.061 -0.002 0.111
asser_t1 ~1 3.105 2.905 3.305 4.407 51.115 0.000 2.986 3.224
d_asser_1 ~~ d_asser_1 0.066 -0.017 0.148 0.965 2.613 0.009 0.016 0.115
asser_t1 ~~ d_asser_1 -0.036 -0.107 0.036 -0.199 -1.642 0.101 -0.078 0.007
asser_t1 ~ frequ 0.108 -0.181 0.397 0.105 1.228 0.219 -0.064 0.280
d_asser_1 ~ frequ 0.071 -0.093 0.236 0.188 1.428 0.153 -0.027 0.169
frequ ~~ frequ 0.471 0.201 0.741 1.000 5.748 0.000 0.310 0.632

The moderation effect of the frequency of self-acceptance behaviors with assertiveness change score (current-personality) is not significantly different from zero, b = 0.071, p = 0.153.

6.7.8.5 Energy - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7985.878 8073.671 0.987 0.034 0.045
# parameters of interest
params_lcs_energ_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_energ_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_energ_curr_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~ sa07_03_t1", "sa07_03_t1 ~~ sa07_03_t1", "d_energ_1 ~ sa07_03_t1", # acceptance goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
Joining with `by = join_by(term)`
kable(params_lcs_energ_curr_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.018 NA NA 1.000 1.000
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.488 NA NA 1.000 1.000
d_energ_1 ~1 0.046 -0.018 0.110 0.257 2.378 0.017 0.008 0.084
energ_t1 ~1 3.325 3.139 3.510 8.893 58.851 0.000 3.214 3.435
d_energ_1 ~~ d_energ_1 0.032 -0.018 0.081 0.978 2.084 0.037 0.002 0.061
energ_t1 ~~ d_energ_1 -0.014 -0.040 0.013 -0.236 -1.656 0.098 -0.030 0.002
d_energ_1 ~ sa07_03_t1 0.026 -0.029 0.082 0.147 1.554 0.120 -0.007 0.060
sa07_03_t1 ~~ sa07_03_t1 0.997 0.815 1.179 1.000 18.028 0.000 0.889 1.105

The moderation effect of the facet-specific acceptance goal with the energy change score (current-personality) is not significantly different from zero, b = 0.026, p = 0.12.

6.7.8.6 Energy - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9279.408 9393.921 0.984 0.033 0.051
# parameters of interest
params_lcs_energ_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_energ_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_energ_curr_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~ frequ", "frequ ~~ frequ", "energ_t1 ~ frequ", # frequency of self improvement
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
Joining with `by = join_by(term)`
kable(params_lcs_energ_curr_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.019 NA NA 1.000 1.000
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.487 NA NA 1.000 1.000
d_energ_1 ~1 0.047 -0.020 0.114 0.257 2.328 0.020 0.007 0.087
energ_t1 ~1 3.324 3.135 3.513 8.612 57.905 0.000 3.211 3.436
d_energ_1 ~~ d_energ_1 0.034 -0.021 0.088 0.986 2.040 0.041 0.001 0.066
energ_t1 ~~ d_energ_1 -0.021 -0.057 0.016 -0.291 -1.846 0.065 -0.042 0.001
energ_t1 ~ frequ 0.051 -0.117 0.218 0.091 0.998 0.318 -0.049 0.151
d_energ_1 ~ frequ 0.031 -0.065 0.127 0.116 1.061 0.289 -0.026 0.088
frequ ~~ frequ 0.479 0.216 0.742 1.000 5.994 0.000 0.322 0.636

The moderation effect of the frequency of self-acceptance behaviors with the energy change score (current-personality) is not significantly different from zero, b = 0.031, p = 0.289.

6.7.8.7 Compassion - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7815.468 7903.262 0.972 0.045 0.045
# parameters of interest
params_lcs_compa_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_compa_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_compa_curr_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~ sa07_04_t1", "sa07_04_t1 ~~ sa07_04_t1", "d_compa_1 ~ sa07_04_t1", # acceptance goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
Joining with `by = join_by(term)`
kable(params_lcs_compa_curr_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
compa_t2 ~ compa_t1 1.000 1.000 1.000 0.893 NA NA 1.000 1.000
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.554 NA NA 1.000 1.000
d_compa_1 ~1 0.045 -0.074 0.164 0.118 1.246 0.213 -0.026 0.116
compa_t1 ~1 4.213 4.065 4.361 6.866 93.614 0.000 4.125 4.302
d_compa_1 ~~ d_compa_1 0.143 -0.020 0.307 0.991 2.894 0.004 0.046 0.241
compa_t1 ~~ d_compa_1 -0.032 -0.138 0.075 -0.144 -0.978 0.328 -0.095 0.032
d_compa_1 ~ sa07_04_t1 -0.035 -0.175 0.104 -0.093 -0.838 0.402 -0.118 0.048
sa07_04_t1 ~~ sa07_04_t1 0.997 0.823 1.172 1.000 18.799 0.000 0.893 1.101

The moderation effect of the facet-specific acceptance goal with the compassion change score (current-personality) is not significantly different from zero, b = -0.035, p = 0.402.

6.7.8.8 Compassion - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9057.893 9172.407 0.973 0.041 0.05
# parameters of interest
params_lcs_compa_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_compa_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_compa_curr_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~ frequ", "frequ ~~ frequ", "compa_t1 ~ frequ", # frequency of self improvement
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
Joining with `by = join_by(term)`
kable(params_lcs_compa_curr_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
compa_t2 ~ compa_t1 1.000 1.000 1.000 0.897 NA NA 1.000 1.000
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.551 NA NA 1.000 1.000
d_compa_1 ~1 0.051 -0.070 0.172 0.130 1.380 0.168 -0.021 0.123
compa_t1 ~1 4.213 4.062 4.364 6.594 91.762 0.000 4.123 4.303
d_compa_1 ~~ d_compa_1 0.154 -0.024 0.331 0.998 2.846 0.004 0.048 0.259
compa_t1 ~~ d_compa_1 -0.025 -0.135 0.085 -0.103 -0.754 0.451 -0.091 0.040
compa_t1 ~ frequ 0.183 -0.060 0.425 0.197 2.478 0.013 0.038 0.327
d_compa_1 ~ frequ -0.024 -0.247 0.199 -0.042 -0.354 0.723 -0.157 0.109
frequ ~~ frequ 0.476 0.210 0.743 1.000 5.888 0.000 0.318 0.635

The moderation effect of the frequency of self-acceptance behaviors with the compassion change score (current-personality) is not significantly different from zero, b = -0.024, p = 0.723.

6.7.8.9 Respectfulness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 6771.62 6859.414 0.967 0.052 0.054
# parameters of interest
params_lcs_respe_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_respe_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_respe_curr_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~ sa07_05_t1", "sa07_05_t1 ~~ sa07_05_t1", "d_respe_1 ~ sa07_05_t1", # acceptance goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
Joining with `by = join_by(term)`
kable(params_lcs_respe_curr_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
respe_t2 ~ respe_t1 1.000 1.000 1.000 0.999 NA NA 1.000 1.000
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.629 NA NA 1.000 1.000
d_respe_1 ~1 0.020 -0.075 0.116 0.062 0.700 0.484 -0.037 0.077
respe_t1 ~1 4.444 4.331 4.557 8.490 129.561 0.000 4.377 4.511
d_respe_1 ~~ d_respe_1 0.104 -0.023 0.230 0.955 2.703 0.007 0.028 0.179
respe_t1 ~~ d_respe_1 -0.067 -0.151 0.016 -0.429 -2.663 0.008 -0.117 -0.018
d_respe_1 ~ sa07_05_t1 -0.070 -0.191 0.052 -0.212 -1.891 0.059 -0.142 0.003
sa07_05_t1 ~~ sa07_05_t1 0.997 0.737 1.257 1.000 12.613 0.000 0.842 1.152

The moderation effect of the frequency of self-acceptance behaviors with the respectfulness change score (current-personality) is not significantly different from zero, b = -0.07, p = 0.059.

6.7.8.10 Respectfulness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 8051.419 8165.932 0.965 0.049 0.065
# parameters of interest
params_lcs_respe_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_respe_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_respe_curr_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~ frequ", "frequ ~~ frequ", "respe_t1 ~ frequ", # frequency of self improvement
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
Joining with `by = join_by(term)`
kable(params_lcs_respe_curr_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
respe_t2 ~ respe_t1 1.000 1.000 1.000 0.997 NA NA 1.000 1.000
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.629 NA NA 1.000 1.000
d_respe_1 ~1 0.024 -0.073 0.121 0.072 0.809 0.418 -0.034 0.081
respe_t1 ~1 4.444 4.326 4.561 8.477 124.257 0.000 4.374 4.514
d_respe_1 ~~ d_respe_1 0.109 -0.031 0.249 0.992 2.551 0.011 0.025 0.192
respe_t1 ~~ d_respe_1 -0.055 -0.141 0.031 -0.319 -2.104 0.035 -0.106 -0.004
respe_t1 ~ frequ 0.056 -0.137 0.250 0.074 0.955 0.340 -0.059 0.171
d_respe_1 ~ frequ 0.044 -0.117 0.205 0.092 0.899 0.369 -0.052 0.140
frequ ~~ frequ 0.479 0.215 0.743 1.000 5.972 0.000 0.322 0.636

The moderation effect of the frequency of self-acceptance behaviors with the respectfulness change score (current-personality) is not significantly different from zero, b = 0.044, p = 0.369.

6.7.8.11 Trust - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 8103.023 8190.817 0.966 0.051 0.049
# parameters of interest
params_lcs_trust_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_trust_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_trust_curr_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~ sa07_06_t1", "sa07_06_t1 ~~ sa07_06_t1", "d_trust_1 ~ sa07_06_t1", # acceptance goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
Joining with `by = join_by(term)`
kable(params_lcs_trust_curr_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.040 NA NA 1.000 1.000
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.314 NA NA 1.000 1.000
d_trust_1 ~1 0.095 -0.020 0.209 0.442 2.723 0.006 0.027 0.163
trust_t1 ~1 3.150 2.954 3.347 4.439 52.717 0.000 3.033 3.267
d_trust_1 ~~ d_trust_1 0.038 -0.080 0.157 0.833 1.066 0.287 -0.032 0.109
trust_t1 ~~ d_trust_1 -0.025 -0.118 0.069 -0.186 -0.873 0.382 -0.081 0.031
d_trust_1 ~ sa07_06_t1 0.088 -0.032 0.208 0.409 2.403 0.016 0.016 0.159
sa07_06_t1 ~~ sa07_06_t1 0.997 0.823 1.171 1.000 18.829 0.000 0.893 1.101

The moderation effect of the facet-specific acceptance goal with the trust change score (current-personality) is not significantly different from zero (at p < .001), b = 0.088, p = 0.016.

6.7.8.12 Trust - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9338.825 9453.339 0.963 0.049 0.063
# parameters of interest
params_lcs_trust_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_trust_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_trust_curr_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~ frequ", "frequ ~~ frequ", "trust_t1 ~ frequ", # frequency of self improvement
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
Joining with `by = join_by(term)`
kable(params_lcs_trust_curr_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.038 NA NA 1.000 1.000
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.312 NA NA 1.000 1.000
d_trust_1 ~1 0.094 -0.021 0.210 0.445 2.683 0.007 0.025 0.163
trust_t1 ~1 3.151 2.953 3.348 4.463 52.484 0.000 3.033 3.268
d_trust_1 ~~ d_trust_1 0.044 -0.077 0.165 0.976 1.193 0.233 -0.028 0.116
trust_t1 ~~ d_trust_1 -0.042 -0.140 0.055 -0.288 -1.432 0.152 -0.100 0.016
trust_t1 ~ frequ 0.088 -0.196 0.373 0.086 1.020 0.308 -0.081 0.258
d_trust_1 ~ frequ 0.047 -0.141 0.236 0.154 0.826 0.409 -0.065 0.160
frequ ~~ frequ 0.477 0.213 0.742 1.000 5.946 0.000 0.320 0.635

The moderation effect of the frequency of self-acceptance behaviors with the trust change score (current-personality) is not significantly different from zero, b = 0.047, p = 0.409.

6.7.8.13 Organization - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7669.741 7757.534 1 0 0.023
# parameters of interest
params_lcs_organ_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_organ_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_organ_curr_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~ sa07_07_t1", "sa07_07_t1 ~~ sa07_07_t1", "d_organ_1 ~ sa07_07_t1", # acceptance goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
Joining with `by = join_by(term)`
kable(params_lcs_organ_curr_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.003 NA NA 1.000 1.000
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.507 NA NA 1.000 1.000
d_organ_1 ~1 0.067 -0.071 0.205 0.142 1.604 0.109 -0.015 0.149
organ_t1 ~1 3.036 2.836 3.237 3.242 49.816 0.000 2.917 3.156
d_organ_1 ~~ d_organ_1 0.224 0.038 0.410 0.999 3.955 0.000 0.113 0.335
organ_t1 ~~ d_organ_1 -0.105 -0.234 0.023 -0.290 -2.703 0.007 -0.182 -0.029
d_organ_1 ~ sa07_07_t1 0.018 -0.114 0.149 0.037 0.438 0.661 -0.061 0.096
sa07_07_t1 ~~ sa07_07_t1 0.997 0.850 1.144 1.000 22.344 0.000 0.910 1.084

The moderation effect of the facet-specific acceptance goal with the organization change score (current-personality) is not significantly different from zero, b = 0.018, p = 0.661.

6.7.8.14 Organization - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 8999.082 9113.596 1 0 0.029
# parameters of interest
params_lcs_organ_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_organ_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_organ_curr_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~ frequ", "frequ ~~ frequ", "organ_t1 ~ frequ", # frequency of self improvement
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
Joining with `by = join_by(term)`
kable(params_lcs_organ_curr_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.003 NA NA 1.000 1.000
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.509 NA NA 1.000 1.000
d_organ_1 ~1 0.065 -0.071 0.201 0.139 1.568 0.117 -0.016 0.146
organ_t1 ~1 3.037 2.810 3.263 3.309 44.128 0.000 2.902 3.172
d_organ_1 ~~ d_organ_1 0.216 0.035 0.397 0.998 3.925 0.000 0.108 0.324
organ_t1 ~~ d_organ_1 -0.113 -0.250 0.023 -0.268 -2.726 0.006 -0.195 -0.032
organ_t1 ~ frequ 0.191 -0.161 0.543 0.144 1.788 0.074 -0.018 0.401
d_organ_1 ~ frequ 0.027 -0.201 0.254 0.040 0.387 0.699 -0.109 0.162
frequ ~~ frequ 0.480 0.215 0.744 1.000 5.969 0.000 0.322 0.637

The moderation effect of the frequency of self-acceptance behaviors with the organization change score (current-personality) is not significantly different from zero, b = 0.027, p = 0.699.

6.7.8.15 Productiveness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7582.008 7669.802 0.966 0.061 0.043
# parameters of interest
params_lcs_produ_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_produ_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_produ_curr_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~ sa07_08_t1", "sa07_08_t1 ~~ sa07_08_t1", "d_produ_1 ~ sa07_08_t1", # acceptance goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
Joining with `by = join_by(term)`
kable(params_lcs_produ_curr_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
produ_t2 ~ produ_t1 1.000 1.000 1.000 0.962 NA NA 1.000 1.000
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.540 NA NA 1.000 1.000
d_produ_1 ~1 0.126 0.002 0.251 0.320 3.344 0.001 0.052 0.200
produ_t1 ~1 2.571 2.367 2.775 3.657 41.473 0.000 2.450 2.693
d_produ_1 ~~ d_produ_1 0.154 0.026 0.282 0.989 3.954 0.000 0.078 0.230
produ_t1 ~~ d_produ_1 -0.041 -0.124 0.042 -0.182 -1.616 0.106 -0.090 0.009
d_produ_1 ~ sa07_08_t1 0.042 -0.074 0.158 0.107 1.198 0.231 -0.027 0.111
sa07_08_t1 ~~ sa07_08_t1 0.997 0.829 1.165 1.000 19.477 0.000 0.897 1.097

The moderation effect of the facet-specific acceptance goal with the productiveness change score (current-personality) is not significantly different from zero, b = 0.042, p = 0.231.

6.7.8.16 Productiveness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 8896.383 9010.896 0.968 0.051 0.051
# parameters of interest
params_lcs_produ_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_produ_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_produ_curr_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~ frequ", "frequ ~~ frequ", "produ_t1 ~ frequ", # frequency of self improvement
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
Joining with `by = join_by(term)`
kable(params_lcs_produ_curr_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
produ_t2 ~ produ_t1 1.000 1.000 1.000 0.960 NA NA 1.000 1.000
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.541 NA NA 1.000 1.000
d_produ_1 ~1 0.127 0.003 0.251 0.323 3.361 0.001 0.053 0.201
produ_t1 ~1 2.572 2.357 2.788 3.692 39.276 0.000 2.444 2.700
d_produ_1 ~~ d_produ_1 0.151 0.023 0.279 0.978 3.879 0.000 0.075 0.227
produ_t1 ~~ d_produ_1 -0.062 -0.157 0.033 -0.231 -2.150 0.032 -0.118 -0.005
produ_t1 ~ frequ 0.143 -0.139 0.426 0.141 1.669 0.095 -0.025 0.312
d_produ_1 ~ frequ 0.085 -0.117 0.287 0.149 1.385 0.166 -0.035 0.205
frequ ~~ frequ 0.471 0.202 0.739 1.000 5.764 0.000 0.311 0.631

The moderation effect of the frequency of self-acceptance behaviors with the productiveness change score (current-personality) is not significantly different from zero, b = 0.085, p = 0.166.

6.7.8.17 Responsibility - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7701.938 7789.732 0.893 0.099 0.085
# parameters of interest
params_lcs_respo_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_respo_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_respo_curr_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~ sa07_09_t1", "sa07_09_t1 ~~ sa07_09_t1", "d_respo_1 ~ sa07_09_t1", # acceptance goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
Joining with `by = join_by(term)`
kable(params_lcs_respo_curr_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.017 NA NA 1.000 1.000
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.509 NA NA 1.000 1.000
d_respo_1 ~1 0.019 -0.041 0.079 0.107 1.057 0.291 -0.017 0.055
respo_t1 ~1 3.659 3.491 3.827 10.144 71.769 0.000 3.559 3.759
d_respo_1 ~~ d_respo_1 0.032 -0.021 0.084 0.980 2.001 0.045 0.001 0.063
respo_t1 ~~ d_respo_1 -0.014 -0.042 0.015 -0.248 -1.578 0.114 -0.031 0.003
d_respo_1 ~ sa07_09_t1 0.026 -0.037 0.088 0.141 1.333 0.183 -0.012 0.063
sa07_09_t1 ~~ sa07_09_t1 0.997 0.828 1.166 1.000 19.415 0.000 0.896 1.098

The moderation effect of the facet-specific acceptance goal with the responsibility change score (current-personality) is not significantly different from zero, b = 0.026, p = 0.183.

6.7.8.18 Responsibility - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9001.348 9115.861 0.895 0.087 0.088
# parameters of interest
params_lcs_respo_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_respo_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_respo_curr_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~ frequ", "frequ ~~ frequ", "respo_t1 ~ frequ", # frequency of self improvement
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
Joining with `by = join_by(term)`
kable(params_lcs_respo_curr_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.015 NA NA 1.000 1.000
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.507 NA NA 1.000 1.000
d_respo_1 ~1 0.019 -0.042 0.081 0.106 1.045 0.296 -0.017 0.056
respo_t1 ~1 3.659 3.488 3.829 9.957 70.684 0.000 3.557 3.760
d_respo_1 ~~ d_respo_1 0.034 -0.022 0.089 0.999 1.978 0.048 0.000 0.067
respo_t1 ~~ d_respo_1 -0.019 -0.053 0.015 -0.278 -1.804 0.071 -0.039 0.002
respo_t1 ~ frequ 0.030 -0.129 0.188 0.056 0.617 0.537 -0.065 0.124
d_respo_1 ~ frequ -0.009 -0.101 0.082 -0.035 -0.335 0.737 -0.064 0.045
frequ ~~ frequ 0.485 0.220 0.750 1.000 6.019 0.000 0.327 0.643

The moderation effect of the frequency of self-acceptance behaviors with the responsibility change score (current-personality) is not significantly different from zero, b = -0.009, p = 0.737.

6.7.8.19 Anxiety - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7902.5 7990.294 1 0 0.027
# parameters of interest
params_lcs_anxie_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_anxie_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_anxie_curr_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~ sa07_10_t1", "sa07_10_t1 ~~ sa07_10_t1", "d_anxie_1 ~ sa07_10_t1", # acceptance goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
Joining with `by = join_by(term)`
kable(params_lcs_anxie_curr_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.983 NA NA 1.000 1.000
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.430 NA NA 1.000 1.000
d_anxie_1 ~1 -0.185 -0.325 -0.044 -0.451 -4.333 0.000 -0.268 -0.101
anxie_t1 ~1 3.121 2.911 3.331 3.331 48.870 0.000 2.996 3.246
d_anxie_1 ~~ d_anxie_1 0.168 0.007 0.329 0.999 3.427 0.001 0.072 0.264
anxie_t1 ~~ d_anxie_1 -0.074 -0.197 0.050 -0.213 -1.968 0.049 -0.147 0.000
d_anxie_1 ~ sa07_10_t1 0.012 -0.123 0.147 0.029 0.293 0.769 -0.068 0.092
sa07_10_t1 ~~ sa07_10_t1 0.997 0.844 1.150 1.000 21.431 0.000 0.906 1.088

The moderation effect of the facet-specific acceptance goal with the anxiety change score (current-personality) is not significantly different from zero, b = 0.012, p = 0.769.

6.7.8.20 Anxiety - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9173.393 9287.907 0.99 0.028 0.043
# parameters of interest
params_lcs_anxie_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_anxie_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_anxie_curr_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~ frequ", "frequ ~~ frequ", "anxie_t1 ~ frequ", # frequency of self improvement
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
Joining with `by = join_by(term)`
kable(params_lcs_anxie_curr_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.982 NA NA 1.000 1.000
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.428 NA NA 1.000 1.000
d_anxie_1 ~1 -0.189 -0.332 -0.047 -0.457 -4.370 0.000 -0.274 -0.104
anxie_t1 ~1 3.124 2.903 3.345 3.288 46.499 0.000 2.992 3.255
d_anxie_1 ~~ d_anxie_1 0.155 -0.005 0.315 0.903 3.188 0.001 0.060 0.251
anxie_t1 ~~ d_anxie_1 -0.048 -0.188 0.093 -0.129 -1.114 0.265 -0.131 0.036
anxie_t1 ~ frequ 0.237 -0.071 0.545 0.176 2.529 0.011 0.053 0.420
d_anxie_1 ~ frequ -0.183 -0.418 0.052 -0.312 -2.565 0.010 -0.323 -0.043
frequ ~~ frequ 0.497 0.227 0.767 1.000 6.055 0.000 0.336 0.658

The moderation effect of the frequency of self-acceptance behaviors with the anxiety change score (current-personality) is not significantly different from zero (at p < .001), b = -0.183, p = 0.01.

6.7.8.21 Depression - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7807.04 7894.833 0.954 0.077 0.06
# parameters of interest
params_lcs_depre_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_depre_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_depre_curr_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~ sa07_11_t1", "sa07_11_t1 ~~ sa07_11_t1", "d_depre_1 ~ sa07_11_t1", # acceptance goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
Joining with `by = join_by(term)`
kable(params_lcs_depre_curr_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
depre_t2 ~ depre_t1 1.000 1.000 1.000 0.987 NA NA 1.000 1.000
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.508 NA NA 1.000 1.000
d_depre_1 ~1 -0.128 -0.217 -0.038 -0.446 -4.685 0.000 -0.181 -0.074
depre_t1 ~1 2.975 2.786 3.164 5.351 51.805 0.000 2.862 3.087
d_depre_1 ~~ d_depre_1 0.081 0.019 0.144 0.997 4.261 0.000 0.044 0.119
depre_t1 ~~ d_depre_1 -0.033 -0.070 0.005 -0.232 -2.853 0.004 -0.055 -0.010
d_depre_1 ~ sa07_11_t1 -0.016 -0.089 0.057 -0.055 -0.708 0.479 -0.059 0.028
sa07_11_t1 ~~ sa07_11_t1 0.997 0.848 1.146 1.000 21.989 0.000 0.908 1.086

The moderation effect of the facet-specific acceptance goal with the depression change score (current-personality) is not significantly different from zero, b = -0.016, p = 0.479.

6.7.8.22 Depression - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9090.065 9204.578 0.955 0.066 0.066
# parameters of interest
params_lcs_depre_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_depre_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_depre_curr_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~ frequ", "frequ ~~ frequ", "depre_t1 ~ frequ", # frequency of self improvement
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
Joining with `by = join_by(term)`
kable(params_lcs_depre_curr_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
depre_t2 ~ depre_t1 1.000 1.000 1.000 0.985 NA NA 1.000 1.000
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.505 NA NA 1.000 1.000
d_depre_1 ~1 -0.127 -0.217 -0.037 -0.446 -4.646 0.000 -0.180 -0.073
depre_t1 ~1 2.975 2.778 3.171 5.357 49.875 0.000 2.858 3.092
d_depre_1 ~~ d_depre_1 0.076 0.016 0.136 0.940 4.169 0.000 0.040 0.112
depre_t1 ~~ d_depre_1 -0.031 -0.073 0.011 -0.205 -2.429 0.015 -0.056 -0.006
depre_t1 ~ frequ 0.095 -0.101 0.291 0.119 1.594 0.111 -0.022 0.212
d_depre_1 ~ frequ -0.100 -0.239 0.039 -0.245 -2.368 0.018 -0.183 -0.017
frequ ~~ frequ 0.486 0.219 0.753 1.000 5.985 0.000 0.327 0.645

The moderation effect of the frequency of self-acceptance behaviors with the depression change score (current-personality) is not significantly different from zero (at p < .001), b = -0.1, p = 0.018.

6.7.8.23 Volatility - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7981.646 8069.44 0.99 0.032 0.037
# parameters of interest
params_lcs_volat_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_volat_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_volat_curr_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~ sa07_12_t1", "sa07_12_t1 ~~ sa07_12_t1", "d_volat_1 ~ sa07_12_t1", # acceptance goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
Joining with `by = join_by(term)`
kable(params_lcs_volat_curr_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.057 NA NA 1.000 1.000
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.452 NA NA 1.000 1.000
d_volat_1 ~1 -0.132 -0.265 0.001 -0.325 -3.264 0.001 -0.211 -0.053
volat_t1 ~1 3.118 2.907 3.329 3.288 48.611 0.000 2.992 3.244
d_volat_1 ~~ d_volat_1 0.159 0.001 0.316 0.965 3.319 0.001 0.065 0.252
volat_t1 ~~ d_volat_1 -0.098 -0.228 0.032 -0.288 -2.481 0.013 -0.175 -0.021
d_volat_1 ~ sa07_12_t1 -0.076 -0.211 0.059 -0.187 -1.847 0.065 -0.157 0.005
sa07_12_t1 ~~ sa07_12_t1 0.997 0.823 1.171 1.000 18.847 0.000 0.893 1.101

The moderation effect of the facet-specific acceptance goal with the volatility change score (current-personality) is not significantly different from zero, b = -0.076, p = 0.065.

6.7.8.24 Volatility - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9256.21 9370.723 0.985 0.035 0.045
# parameters of interest
params_lcs_volat_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_volat_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_volat_curr_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~ frequ", "frequ ~~ frequ", "volat_t1 ~ frequ", # frequency of self improvement
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
Joining with `by = join_by(term)`
kable(params_lcs_volat_curr_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.056 NA NA 1.000 1.000
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.450 NA NA 1.000 1.000
d_volat_1 ~1 -0.133 -0.267 0.001 -0.327 -3.266 0.001 -0.213 -0.053
volat_t1 ~1 3.119 2.895 3.342 3.272 45.993 0.000 2.986 3.251
d_volat_1 ~~ d_volat_1 0.165 0.005 0.325 1.000 3.386 0.001 0.069 0.260
volat_t1 ~~ d_volat_1 -0.130 -0.261 0.002 -0.335 -3.252 0.001 -0.208 -0.051
volat_t1 ~ frequ 0.072 -0.260 0.404 0.053 0.714 0.475 -0.126 0.270
d_volat_1 ~ frequ 0.008 -0.225 0.242 0.015 0.119 0.906 -0.131 0.148
frequ ~~ frequ 0.490 0.220 0.760 1.000 5.976 0.000 0.329 0.651

The moderation effect of the frequency of self-acceptance behaviors with the volatility change score (current-personality) is significantly different from zero, b = 0.008, p = 0.906.

6.7.8.25 Curiosity - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7667.624 7755.418 0.982 0.038 0.047
# parameters of interest
params_lcs_curio_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_curio_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_curio_curr_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~ sa07_13_t1", "sa07_13_t1 ~~ sa07_13_t1", "d_curio_1 ~ sa07_13_t1", # acceptance goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
Joining with `by = join_by(term)`
kable(params_lcs_curio_curr_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.085 NA NA 1.000 1.000
d_curio_1 =~ curio_t2 1.000 1.000 1.000 NA NA NA 1.000 1.000
d_curio_1 ~1 0.061 -0.017 0.138 NA 2.563 0.010 0.014 0.107
curio_t1 ~1 4.032 3.872 4.192 7.055 82.973 0.000 3.936 4.127
d_curio_1 ~~ d_curio_1 -0.015 -0.079 0.049 NA -0.793 0.428 -0.053 0.023
curio_t1 ~~ d_curio_1 -0.008 -0.062 0.047 -0.113 -0.455 0.649 -0.040 0.025
d_curio_1 ~ sa07_13_t1 0.057 -0.014 0.129 NA 2.645 0.008 0.015 0.100
sa07_13_t1 ~~ sa07_13_t1 0.997 0.809 1.185 1.000 17.438 0.000 0.885 1.109

The moderation effect of the facet-specific acceptance goal with the curiosity change score (current-personality) is not significantly different from zero (at p < .001), b = 0.057, p = 0.008.

6.7.8.26 Curiosity - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 8908.917 9023.431 0.991 0.025 0.04
# parameters of interest
params_lcs_curio_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_curio_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_curio_curr_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~ frequ", "frequ ~~ frequ", "curio_t1 ~ frequ", # frequency of self improvement
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
Joining with `by = join_by(term)`
kable(params_lcs_curio_curr_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.084 NA NA 1.000 1.000
d_curio_1 =~ curio_t2 1.000 1.000 1.000 NA NA NA 1.000 1.000
d_curio_1 ~1 0.060 -0.018 0.137 NA 2.530 0.011 0.013 0.106
curio_t1 ~1 4.032 3.865 4.199 7.155 79.542 0.000 3.933 4.131
d_curio_1 ~~ d_curio_1 -0.014 -0.075 0.048 NA -0.724 0.469 -0.050 0.023
curio_t1 ~~ d_curio_1 -0.020 -0.076 0.037 -0.304 -1.156 0.248 -0.054 0.014
curio_t1 ~ frequ 0.094 -0.107 0.296 0.116 1.539 0.124 -0.026 0.214
d_curio_1 ~ frequ 0.050 -0.077 0.178 NA 1.300 0.194 -0.026 0.127
frequ ~~ frequ 0.478 0.215 0.741 1.000 5.972 0.000 0.321 0.634

The moderation effect of the frequency of self-acceptance behaviors with the curiosity change score (current-personality) is not significantly different from zero, b = 0.05, p = 0.194.

6.7.8.27 Aesthetic - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7960.573 8048.367 1 0 0.037
# parameters of interest
params_lcs_aesth_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_aesth_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_aesth_curr_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~ sa07_14_t1", "sa07_14_t1 ~~ sa07_14_t1", "d_aesth_1 ~ sa07_14_t1", # acceptance goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
Joining with `by = join_by(term)`
kable(params_lcs_aesth_curr_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.996 NA NA 1.000 1.000
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.377 NA NA 1.000 1.000
d_aesth_1 ~1 -0.001 -0.049 0.047 -0.011 -0.096 0.923 -0.030 0.027
aesth_t1 ~1 3.152 2.948 3.357 9.256 50.669 0.000 3.030 3.274
d_aesth_1 ~~ d_aesth_1 0.017 -0.020 0.054 0.999 1.485 0.137 -0.005 0.039
aesth_t1 ~~ d_aesth_1 -0.008 -0.029 0.012 -0.201 -1.320 0.187 -0.021 0.004
d_aesth_1 ~ sa07_14_t1 -0.004 -0.051 0.043 -0.031 -0.281 0.779 -0.032 0.024
sa07_14_t1 ~~ sa07_14_t1 0.997 0.848 1.146 1.000 21.957 0.000 0.908 1.086

The moderation effect of the facet-specific acceptance goal with the aesthetic change score (current-personality) is not significantly different from zero, b = -0.004, p = 0.779.

6.7.8.28 Aesthetic - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 9195.052 9309.565 0.982 0.037 0.045
# parameters of interest
params_lcs_aesth_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_aesth_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_aesth_curr_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~ frequ", "frequ ~~ frequ", "aesth_t1 ~ frequ", # frequency of self improvement
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
Joining with `by = join_by(term)`
kable(params_lcs_aesth_curr_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.998 NA NA 1.000 1.000
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.379 NA NA 1.000 1.000
d_aesth_1 ~1 -0.001 -0.048 0.046 -0.010 -0.085 0.932 -0.029 0.027
aesth_t1 ~1 3.152 2.946 3.358 9.451 50.346 0.000 3.030 3.275
d_aesth_1 ~~ d_aesth_1 0.015 -0.019 0.049 0.940 1.444 0.149 -0.005 0.036
aesth_t1 ~~ d_aesth_1 -0.011 -0.034 0.013 -0.267 -1.489 0.136 -0.024 0.003
aesth_t1 ~ frequ 0.128 -0.016 0.272 0.265 2.932 0.003 0.043 0.214
d_aesth_1 ~ frequ 0.045 -0.047 0.137 0.245 1.606 0.108 -0.010 0.100
frequ ~~ frequ 0.476 0.210 0.741 1.000 5.894 0.000 0.318 0.634

The moderation effect of the frequency of self-acceptance behaviors with the aesthetic change score (current-personality) is not significantly different from zero, b = 0.045, p = 0.108.

6.7.8.29 Imagination - specific, facet-level acceptance goal as moderator of change

Results summary (*sa07_$$_t1* = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 23 7639.965 7727.759 0.939 0.074 0.056
# parameters of interest
params_lcs_imagi_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_imagi_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
  select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_imagi_curr_specif_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~ sa07_15_t1", "sa07_15_t1 ~~ sa07_15_t1", "d_imagi_1 ~ sa07_15_t1", # acceptance goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
Joining with `by = join_by(term)`
kable(params_lcs_imagi_curr_specif_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.073 NA NA 1.000 1.000
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.436 NA NA 1.000 1.000
d_imagi_1 ~1 0.131 0.027 0.235 0.482 4.152 0.000 0.069 0.193
imagi_t1 ~1 3.641 3.473 3.808 5.427 71.569 0.000 3.541 3.740
d_imagi_1 ~~ d_imagi_1 0.073 -0.090 0.235 0.978 1.469 0.142 -0.024 0.169
imagi_t1 ~~ d_imagi_1 -0.054 -0.161 0.053 -0.339 -1.655 0.098 -0.118 0.010
d_imagi_1 ~ sa07_15_t1 0.040 -0.075 0.156 0.148 1.150 0.250 -0.028 0.109
sa07_15_t1 ~~ sa07_15_t1 0.997 0.856 1.138 1.000 23.329 0.000 0.913 1.081

The moderation effect of the facet-specific acceptance goal with the imagination change score (current-personality) is not significantly different from zero, b = 0.04, p = 0.25.

6.7.8.30 Imagination - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
336 30 8917.338 9031.852 0.952 0.058 0.056
# parameters of interest
params_lcs_imagi_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_imagi_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, estimate, ci999lo = conf.low, ci999hi = conf.high, std.all, statistic, p.value) %>%    left_join(broom::tidy(fit_mi_lcs_imagi_curr_frequ_hyp7,                          conf.int = TRUE, conf.level = 0.95) %>%                select(term, ci95lo = conf.low, ci95hi = conf.high)) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~ frequ", "frequ ~~ frequ", "imagi_t1 ~ frequ", # frequency of self improvement
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
Joining with `by = join_by(term)`
kable(params_lcs_imagi_curr_frequ_hyp7, digits = 3) 
term estimate ci999lo ci999hi std.all statistic p.value ci95lo ci95hi
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.067 NA NA 1.000 1.000
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.427 NA NA 1.000 1.000
d_imagi_1 ~1 0.132 0.029 0.236 0.485 4.201 0.000 0.071 0.194
imagi_t1 ~1 3.641 3.465 3.816 5.343 68.382 0.000 3.536 3.745
d_imagi_1 ~~ d_imagi_1 0.074 -0.095 0.244 0.998 1.444 0.149 -0.027 0.175
imagi_t1 ~~ d_imagi_1 -0.066 -0.198 0.065 -0.360 -1.656 0.098 -0.145 0.012
imagi_t1 ~ frequ 0.130 -0.131 0.391 0.131 1.635 0.102 -0.026 0.285
d_imagi_1 ~ frequ 0.016 -0.182 0.215 0.041 0.271 0.787 -0.102 0.135
frequ ~~ frequ 0.474 0.207 0.741 1.000 5.841 0.000 0.315 0.633

The moderation effect of the frequency of self-acceptance behaviors with the imagination change score (current-personality) is not significantly different from zero, b = 0.016, p = 0.787.

6.7.9 Hyp 7: Effects summary

6.7.9.1 Summary: Ideal personality

Collect all relevant effects:

Show the code
# create df for table:

# main effects (change score)
df_table_hyp7_main <- bind_rows(
  #traits
  params_lcs_extra_ideal_specif_hyp7 %>% filter(term=="d_extra_1 ~1 "),
  params_lcs_extra_ideal_frequ_hyp7 %>% filter(term=="d_extra_1 ~1 "),
  params_lcs_agree_ideal_specif_hyp7 %>% filter(term=="d_agree_1 ~1 "),
  params_lcs_agree_ideal_frequ_hyp7 %>% filter(term=="d_agree_1 ~1 "),
  params_lcs_consc_ideal_specif_hyp7 %>% filter(term=="d_consc_1 ~1 "),
  params_lcs_consc_ideal_frequ_hyp7 %>% filter(term=="d_consc_1 ~1 "),
  params_lcs_neuro_ideal_specif_hyp7 %>% filter(term=="d_neuro_1 ~1 "),
  params_lcs_neuro_ideal_frequ_hyp7 %>% filter(term=="d_neuro_1 ~1 "),
  params_lcs_openn_ideal_specif_hyp7 %>% filter(term=="d_openn_1 ~1 "),
  params_lcs_openn_ideal_frequ_hyp7 %>% filter(term=="d_openn_1 ~1 "),
  #facets
  params_lcs_socia_ideal_specif_hyp7 %>% filter(term=="d_socia_1 ~1 "),
  params_lcs_socia_ideal_frequ_hyp7 %>% filter(term=="d_socia_1 ~1 "),
  params_lcs_asser_ideal_specif_hyp7 %>% filter(term=="d_asser_1 ~1 "),
  params_lcs_asser_ideal_frequ_hyp7 %>% filter(term=="d_asser_1 ~1 "),
  params_lcs_energ_ideal_specif_hyp7 %>% filter(term=="d_energ_1 ~1 "),
  params_lcs_energ_ideal_frequ_hyp7 %>% filter(term=="d_energ_1 ~1 "),
  params_lcs_compa_ideal_specif_hyp7 %>% filter(term=="d_compa_1 ~1 "),
  params_lcs_compa_ideal_frequ_hyp7 %>% filter(term=="d_compa_1 ~1 "),
  params_lcs_respe_ideal_specif_hyp7 %>% filter(term=="d_respe_1 ~1 "),
  params_lcs_respe_ideal_frequ_hyp7 %>% filter(term=="d_respe_1 ~1 "),
  params_lcs_trust_ideal_specif_hyp7 %>% filter(term=="d_trust_1 ~1 "),
  params_lcs_trust_ideal_frequ_hyp7 %>% filter(term=="d_trust_1 ~1 "),
  params_lcs_organ_ideal_specif_hyp7 %>% filter(term=="d_organ_1 ~1 "),
  params_lcs_organ_ideal_frequ_hyp7 %>% filter(term=="d_organ_1 ~1 "),
  params_lcs_produ_ideal_specif_hyp7 %>% filter(term=="d_produ_1 ~1 "),
  params_lcs_produ_ideal_frequ_hyp7 %>% filter(term=="d_produ_1 ~1 "),
  params_lcs_respo_ideal_specif_hyp7 %>% filter(term=="d_respo_1 ~1 "),
  params_lcs_respo_ideal_frequ_hyp7 %>% filter(term=="d_respo_1 ~1 "),
  params_lcs_anxie_ideal_specif_hyp7 %>% filter(term=="d_anxie_1 ~1 "),
  params_lcs_anxie_ideal_frequ_hyp7 %>% filter(term=="d_anxie_1 ~1 "),
  params_lcs_depre_ideal_specif_hyp7 %>% filter(term=="d_depre_1 ~1 "),
  params_lcs_depre_ideal_frequ_hyp7 %>% filter(term=="d_depre_1 ~1 "),
  params_lcs_volat_ideal_specif_hyp7 %>% filter(term=="d_volat_1 ~1 "),
  params_lcs_volat_ideal_frequ_hyp7 %>% filter(term=="d_volat_1 ~1 "),
  params_lcs_curio_ideal_specif_hyp7 %>% filter(term=="d_curio_1 ~1 "),
  params_lcs_curio_ideal_frequ_hyp7 %>% filter(term=="d_curio_1 ~1 "),
  params_lcs_aesth_ideal_specif_hyp7 %>% filter(term=="d_aesth_1 ~1 "),
  params_lcs_aesth_ideal_frequ_hyp7 %>% filter(term=="d_aesth_1 ~1 "),
  params_lcs_imagi_ideal_specif_hyp7 %>% filter(term=="d_imagi_1 ~1 "),
  params_lcs_imagi_ideal_frequ_hyp7 %>% filter(term=="d_imagi_1 ~1 ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("Goals", "Frequency"), 20)) %>% 
  select(trait, moderator, est_main = estimate, std_main = std.all, p_main = p.value)

# moderation effects
df_table_hyp7_mod <- bind_rows(
  #traits
  params_lcs_extra_ideal_specif_hyp7 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_ideal_frequ_hyp7 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_ideal_specif_hyp7 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_ideal_frequ_hyp7 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_ideal_specif_hyp7 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_ideal_frequ_hyp7 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_ideal_specif_hyp7 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_ideal_frequ_hyp7 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_ideal_specif_hyp7 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_ideal_frequ_hyp7 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_ideal_specif_hyp7 %>% filter(term=="d_socia_1 ~ sa07_01_t1"),
  params_lcs_socia_ideal_frequ_hyp7 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_ideal_specif_hyp7 %>% filter(term=="d_asser_1 ~ sa07_02_t1"),
  params_lcs_asser_ideal_frequ_hyp7 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_ideal_specif_hyp7 %>% filter(term=="d_energ_1 ~ sa07_03_t1"),
  params_lcs_energ_ideal_frequ_hyp7 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_ideal_specif_hyp7 %>% filter(term=="d_compa_1 ~ sa07_04_t1"),
  params_lcs_compa_ideal_frequ_hyp7 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_ideal_specif_hyp7 %>% filter(term=="d_respe_1 ~ sa07_05_t1"),
  params_lcs_respe_ideal_frequ_hyp7 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_ideal_specif_hyp7 %>% filter(term=="d_trust_1 ~ sa07_06_t1"),
  params_lcs_trust_ideal_frequ_hyp7 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_ideal_specif_hyp7 %>% filter(term=="d_organ_1 ~ sa07_07_t1"),
  params_lcs_organ_ideal_frequ_hyp7 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_ideal_specif_hyp7 %>% filter(term=="d_produ_1 ~ sa07_08_t1"),
  params_lcs_produ_ideal_frequ_hyp7 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_ideal_specif_hyp7 %>% filter(term=="d_respo_1 ~ sa07_09_t1"),
  params_lcs_respo_ideal_frequ_hyp7 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_ideal_specif_hyp7 %>% filter(term=="d_anxie_1 ~ sa07_10_t1"),
  params_lcs_anxie_ideal_frequ_hyp7 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_ideal_specif_hyp7 %>% filter(term=="d_depre_1 ~ sa07_11_t1"),
  params_lcs_depre_ideal_frequ_hyp7 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_ideal_specif_hyp7 %>% filter(term=="d_volat_1 ~ sa07_12_t1"),
  params_lcs_volat_ideal_frequ_hyp7 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_ideal_specif_hyp7 %>% filter(term=="d_curio_1 ~ sa07_13_t1"),
  params_lcs_curio_ideal_frequ_hyp7 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_ideal_specif_hyp7 %>% filter(term=="d_aesth_1 ~ sa07_14_t1"),
  params_lcs_aesth_ideal_frequ_hyp7 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_ideal_specif_hyp7 %>% filter(term=="d_imagi_1 ~ sa07_15_t1"),
  params_lcs_imagi_ideal_frequ_hyp7 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("Goals", "Frequency"), 20)) %>% 
  select(trait, moderator, est_mod = estimate, std_mod = std.all, p_mod = p.value)

# combine
df_table_hyp7 <- df_table_hyp7_main %>% left_join(df_table_hyp7_mod)

Results summary across the Big Five traits: trait-specific acceptance goals (Goals) and frequency of self-acceptance behaviors (Frequency) as moderators on the latent change score. *_main* refers to the main effects (change scores) and *_mod* to the moderation effects.

kable(df_table_hyp7[1:10, ], digits = 3)
trait moderator est_main std_main p_main est_mod std_mod p_mod
extraversion Goals -0.020 -0.076 0.438 -0.042 -0.103 0.390
extraversion Frequency -0.019 -0.072 0.465 0.010 0.026 0.823
agreeableness Goals 0.006 0.021 0.795 -0.017 -0.040 0.682
agreeableness Frequency 0.006 0.023 0.770 0.031 0.078 0.422
conscientiousness Goals 0.026 0.081 0.273 -0.056 -0.132 0.118
conscientiousness Frequency 0.027 0.085 0.248 0.060 0.131 0.111
neuroticism Goals -0.007 -0.019 0.817 -0.014 -0.027 0.741
neuroticism Frequency -0.006 -0.018 0.821 0.029 0.057 0.569
openness Goals 0.014 0.068 0.381 0.027 0.073 0.344
openness Frequency 0.015 0.069 0.368 0.010 0.032 0.717

No significant main or moderator effects at the domain level (ideal personality) that are significantly different from zero.

Results summary across the Big Five facets: trait-specific acceptance goals (goals) and frequency of self-acceptance behaviors (frequency) as moderators on the latent change score. *_main* refers to the main effects (change scores) and *_mod* to the moderation effects.

kable(df_table_hyp7[11:40, ], digits = 3)
trait moderator est_main std_main p_main est_mod std_mod p_mod
sociability Goals -0.062 -0.323 0.043 -0.065 -0.341 0.034
sociability Frequency -0.062 -0.320 0.048 -0.024 -0.086 0.639
assertiveness Goals -0.025 -0.154 0.306 0.031 0.189 0.231
assertiveness Frequency -0.026 -0.155 0.312 -0.011 -0.046 0.800
energy Goals -0.002 -0.014 0.885 -0.002 -0.010 0.915
energy Frequency 0.000 0.002 0.986 0.024 0.096 0.409
compassion Goals 0.016 0.046 0.689 0.010 0.029 0.821
compassion Frequency 0.020 0.053 0.646 0.000 -0.001 0.996
respectfulness Goals -0.001 -0.009 0.950 -0.005 -0.036 0.820
respectfulness Frequency -0.001 -0.006 0.968 0.033 0.157 0.348
trust Goals 0.014 0.052 0.653 0.013 0.047 0.697
trust Frequency 0.015 0.056 0.626 0.065 0.165 0.232
organization Goals 0.005 0.019 0.861 -0.029 -0.112 0.334
organization Frequency 0.005 0.019 0.860 0.003 0.009 0.947
productiveness Goals 0.028 0.117 0.241 -0.035 -0.146 0.141
productiveness Frequency 0.029 0.123 0.216 0.077 0.219 0.053
responsibility Goals 0.017 0.063 0.534 -0.030 -0.113 0.272
responsibility Frequency 0.018 0.066 0.512 0.071 0.181 0.105
anxiety Goals -0.019 -0.076 0.515 0.004 0.014 0.890
anxiety Frequency -0.020 -0.079 0.508 0.077 0.210 0.135
depression Goals -0.006 -0.024 0.813 0.006 0.024 0.804
depression Frequency -0.006 -0.022 0.821 0.033 0.084 0.472
volatility Goals -0.010 -0.038 0.758 -0.055 -0.216 0.064
volatility Frequency -0.009 -0.034 0.788 -0.033 -0.090 0.545
curiosity Goals 0.017 0.081 0.532 0.029 0.138 0.222
curiosity Frequency 0.017 0.081 0.540 0.027 0.090 0.520
aesthetic Goals 0.020 0.119 0.240 0.006 0.037 0.646
aesthetic Frequency 0.019 0.117 0.252 0.021 0.091 0.470
imagination Goals -0.012 -0.035 0.718 -0.019 -0.056 0.566
imagination Frequency -0.012 -0.035 0.717 -0.031 -0.066 0.580

No significant main or moderator effects at the domain level (ideal personality) that are significantly different from zero at p < .001.

  • Only at p < .05: The facet-specific acceptance goal moderates changes in ideal-level sociability.

Prepare data frame for plotting:

Show the code
df_table_hyp7_plot <- bind_rows(
  #traits
  params_lcs_extra_ideal_specif_hyp7 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_ideal_frequ_hyp7 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_ideal_specif_hyp7 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_ideal_frequ_hyp7 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_ideal_specif_hyp7 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_ideal_frequ_hyp7 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_ideal_specif_hyp7 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_ideal_frequ_hyp7 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_ideal_specif_hyp7 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_ideal_frequ_hyp7 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_ideal_specif_hyp7 %>% filter(term=="d_socia_1 ~ sa07_01_t1"),
  params_lcs_socia_ideal_frequ_hyp7 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_ideal_specif_hyp7 %>% filter(term=="d_asser_1 ~ sa07_02_t1"),
  params_lcs_asser_ideal_frequ_hyp7 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_ideal_specif_hyp7 %>% filter(term=="d_energ_1 ~ sa07_03_t1"),
  params_lcs_energ_ideal_frequ_hyp7 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_ideal_specif_hyp7 %>% filter(term=="d_compa_1 ~ sa07_04_t1"),
  params_lcs_compa_ideal_frequ_hyp7 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_ideal_specif_hyp7 %>% filter(term=="d_respe_1 ~ sa07_05_t1"),
  params_lcs_respe_ideal_frequ_hyp7 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_ideal_specif_hyp7 %>% filter(term=="d_trust_1 ~ sa07_06_t1"),
  params_lcs_trust_ideal_frequ_hyp7 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_ideal_specif_hyp7 %>% filter(term=="d_organ_1 ~ sa07_07_t1"),
  params_lcs_organ_ideal_frequ_hyp7 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_ideal_specif_hyp7 %>% filter(term=="d_produ_1 ~ sa07_08_t1"),
  params_lcs_produ_ideal_frequ_hyp7 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_ideal_specif_hyp7 %>% filter(term=="d_respo_1 ~ sa07_09_t1"),
  params_lcs_respo_ideal_frequ_hyp7 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_ideal_specif_hyp7 %>% filter(term=="d_anxie_1 ~ sa07_10_t1"),
  params_lcs_anxie_ideal_frequ_hyp7 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_ideal_specif_hyp7 %>% filter(term=="d_depre_1 ~ sa07_11_t1"),
  params_lcs_depre_ideal_frequ_hyp7 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_ideal_specif_hyp7 %>% filter(term=="d_volat_1 ~ sa07_12_t1"),
  params_lcs_volat_ideal_frequ_hyp7 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_ideal_specif_hyp7 %>% filter(term=="d_curio_1 ~ sa07_13_t1"),
  params_lcs_curio_ideal_frequ_hyp7 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_ideal_specif_hyp7 %>% filter(term=="d_aesth_1 ~ sa07_14_t1"),
  params_lcs_aesth_ideal_frequ_hyp7 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_ideal_specif_hyp7 %>% filter(term=="d_imagi_1 ~ sa07_15_t1"),
  params_lcs_imagi_ideal_frequ_hyp7 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("Goals", "Frequency"), 20)) %>% 
  select(trait, moderator, estimate, 
         ci999lo, ci999hi, ci95lo, ci95hi, std.all, statistic, p.value)

df_table_hyp7_plot <- df_table_hyp7_plot %>% 
  mutate(include_0 = ifelse(ci999lo < 0 & ci999hi > 0, "n.s.", "*")) %>% 
  mutate(ref = factor("Ideal", levels = c("Ideal"), labels = c("Ideal"))) %>% 
  mutate(moderator = factor(moderator, levels = c("Goals", "Frequency"), 
                            labels = c("Goals", "Frequency"))) %>% 
  mutate(trait = factor(trait, levels = names(b5_vars), 
                        labels = stringr::str_to_title(names(b5_vars))))

Plotting the effect size across all analyses:

  • Ideal = ideal-level personality
  • Goals = specific, facet-level acceptance goal(s) as moderator
  • Frequency = frequency of self-acceptance behavior as moderator

Important: these show both 99.9% and 95% confidence intervals (for better visual comparability with Study 1 plot)

Show the code
ggplot(df_table_hyp7_plot, aes(x = fct_rev(trait), y = estimate, color = include_0)) +
  geom_hline(yintercept=0, linetype = 3) +
  geom_point(size=3, position=position_dodge(0.4)) + 
  geom_errorbar(aes(ymin = ci999lo, ymax = ci999hi, color = include_0), width=.2,
                position=position_dodge(0.4), size = 0.2, alpha = 0.75) +
  geom_errorbar(aes(ymin = ci95lo, ymax = ci95hi, color = include_0), width=.2,
                position=position_dodge(0.4)) +
  scale_color_manual(values = c("#A9A9A9", "#000000")) + # reversed here because all n.s.
  facet_wrap( ~ ref + moderator, ncol = 2) +
  theme_bw() +
  scale_shape_manual(values=c(18)) + 
  ylab("Effect Estimates (99.9% / 95% CI)") +
  xlab("") +
  theme(legend.title=element_blank()) +
  theme(legend.text=element_text(size=12)) +
  coord_flip() +
  theme(strip.text.x = element_text(size = 12)) +
  theme(axis.text.x=element_text(size=10, angle = 45, hjust = 1), axis.text.y=element_text(size=12)) + 
  guides(color="none")

6.7.9.2 Summary: Current personality

Collect all relevant effects:

Show the code
# create df for table:

# main effects (change score)
df_table_hyp7_curr_main <- bind_rows(
  #traits
  params_lcs_extra_curr_specif_hyp7 %>% filter(term=="d_extra_1 ~1 "),
  params_lcs_extra_curr_frequ_hyp7 %>% filter(term=="d_extra_1 ~1 "),
  params_lcs_agree_curr_specif_hyp7 %>% filter(term=="d_agree_1 ~1 "),
  params_lcs_agree_curr_frequ_hyp7 %>% filter(term=="d_agree_1 ~1 "),
  params_lcs_consc_curr_specif_hyp7 %>% filter(term=="d_consc_1 ~1 "),
  params_lcs_consc_curr_frequ_hyp7 %>% filter(term=="d_consc_1 ~1 "),
  params_lcs_neuro_curr_specif_hyp7 %>% filter(term=="d_neuro_1 ~1 "),
  params_lcs_neuro_curr_frequ_hyp7 %>% filter(term=="d_neuro_1 ~1 "),
  params_lcs_openn_curr_specif_hyp7 %>% filter(term=="d_openn_1 ~1 "),
  params_lcs_openn_curr_frequ_hyp7 %>% filter(term=="d_openn_1 ~1 "),
  #facets
  params_lcs_socia_curr_specif_hyp7 %>% filter(term=="d_socia_1 ~1 "),
  params_lcs_socia_curr_frequ_hyp7 %>% filter(term=="d_socia_1 ~1 "),
  params_lcs_asser_curr_specif_hyp7 %>% filter(term=="d_asser_1 ~1 "),
  params_lcs_asser_curr_frequ_hyp7 %>% filter(term=="d_asser_1 ~1 "),
  params_lcs_energ_curr_specif_hyp7 %>% filter(term=="d_energ_1 ~1 "),
  params_lcs_energ_curr_frequ_hyp7 %>% filter(term=="d_energ_1 ~1 "),
  params_lcs_compa_curr_specif_hyp7 %>% filter(term=="d_compa_1 ~1 "),
  params_lcs_compa_curr_frequ_hyp7 %>% filter(term=="d_compa_1 ~1 "),
  params_lcs_respe_curr_specif_hyp7 %>% filter(term=="d_respe_1 ~1 "),
  params_lcs_respe_curr_frequ_hyp7 %>% filter(term=="d_respe_1 ~1 "),
  params_lcs_trust_curr_specif_hyp7 %>% filter(term=="d_trust_1 ~1 "),
  params_lcs_trust_curr_frequ_hyp7 %>% filter(term=="d_trust_1 ~1 "),
  params_lcs_organ_curr_specif_hyp7 %>% filter(term=="d_organ_1 ~1 "),
  params_lcs_organ_curr_frequ_hyp7 %>% filter(term=="d_organ_1 ~1 "),
  params_lcs_produ_curr_specif_hyp7 %>% filter(term=="d_produ_1 ~1 "),
  params_lcs_produ_curr_frequ_hyp7 %>% filter(term=="d_produ_1 ~1 "),
  params_lcs_respo_curr_specif_hyp7 %>% filter(term=="d_respo_1 ~1 "),
  params_lcs_respo_curr_frequ_hyp7 %>% filter(term=="d_respo_1 ~1 "),
  params_lcs_anxie_curr_specif_hyp7 %>% filter(term=="d_anxie_1 ~1 "),
  params_lcs_anxie_curr_frequ_hyp7 %>% filter(term=="d_anxie_1 ~1 "),
  params_lcs_depre_curr_specif_hyp7 %>% filter(term=="d_depre_1 ~1 "),
  params_lcs_depre_curr_frequ_hyp7 %>% filter(term=="d_depre_1 ~1 "),
  params_lcs_volat_curr_specif_hyp7 %>% filter(term=="d_volat_1 ~1 "),
  params_lcs_volat_curr_frequ_hyp7 %>% filter(term=="d_volat_1 ~1 "),
  params_lcs_curio_curr_specif_hyp7 %>% filter(term=="d_curio_1 ~1 "),
  params_lcs_curio_curr_frequ_hyp7 %>% filter(term=="d_curio_1 ~1 "),
  params_lcs_aesth_curr_specif_hyp7 %>% filter(term=="d_aesth_1 ~1 "),
  params_lcs_aesth_curr_frequ_hyp7 %>% filter(term=="d_aesth_1 ~1 "),
  params_lcs_imagi_curr_specif_hyp7 %>% filter(term=="d_imagi_1 ~1 "),
  params_lcs_imagi_curr_frequ_hyp7 %>% filter(term=="d_imagi_1 ~1 ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("Goals", "Frequency"), 20)) %>% 
  select(trait, moderator, est_main = estimate, std_main = std.all, p_main = p.value)

# moderation effects
df_table_hyp7_curr_mod <- bind_rows(
  #traits
  params_lcs_extra_curr_specif_hyp7 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_curr_frequ_hyp7 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_curr_specif_hyp7 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_curr_frequ_hyp7 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_curr_specif_hyp7 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_curr_frequ_hyp7 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_curr_specif_hyp7 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_curr_frequ_hyp7 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_curr_specif_hyp7 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_curr_frequ_hyp7 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_curr_specif_hyp7 %>% filter(term=="d_socia_1 ~ sa07_01_t1"),
  params_lcs_socia_curr_frequ_hyp7 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_curr_specif_hyp7 %>% filter(term=="d_asser_1 ~ sa07_02_t1"),
  params_lcs_asser_curr_frequ_hyp7 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_curr_specif_hyp7 %>% filter(term=="d_energ_1 ~ sa07_03_t1"),
  params_lcs_energ_curr_frequ_hyp7 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_curr_specif_hyp7 %>% filter(term=="d_compa_1 ~ sa07_04_t1"),
  params_lcs_compa_curr_frequ_hyp7 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_curr_specif_hyp7 %>% filter(term=="d_respe_1 ~ sa07_05_t1"),
  params_lcs_respe_curr_frequ_hyp7 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_curr_specif_hyp7 %>% filter(term=="d_trust_1 ~ sa07_06_t1"),
  params_lcs_trust_curr_frequ_hyp7 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_curr_specif_hyp7 %>% filter(term=="d_organ_1 ~ sa07_07_t1"),
  params_lcs_organ_curr_frequ_hyp7 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_curr_specif_hyp7 %>% filter(term=="d_produ_1 ~ sa07_08_t1"),
  params_lcs_produ_curr_frequ_hyp7 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_curr_specif_hyp7 %>% filter(term=="d_respo_1 ~ sa07_09_t1"),
  params_lcs_respo_curr_frequ_hyp7 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_curr_specif_hyp7 %>% filter(term=="d_anxie_1 ~ sa07_10_t1"),
  params_lcs_anxie_curr_frequ_hyp7 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_curr_specif_hyp7 %>% filter(term=="d_depre_1 ~ sa07_11_t1"),
  params_lcs_depre_curr_frequ_hyp7 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_curr_specif_hyp7 %>% filter(term=="d_volat_1 ~ sa07_12_t1"),
  params_lcs_volat_curr_frequ_hyp7 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_curr_specif_hyp7 %>% filter(term=="d_curio_1 ~ sa07_13_t1"),
  params_lcs_curio_curr_frequ_hyp7 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_curr_specif_hyp7 %>% filter(term=="d_aesth_1 ~ sa07_14_t1"),
  params_lcs_aesth_curr_frequ_hyp7 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_curr_specif_hyp7 %>% filter(term=="d_imagi_1 ~ sa07_15_t1"),
  params_lcs_imagi_curr_frequ_hyp7 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("Goals", "Frequency"), 20)) %>% 
  select(trait, moderator, est_mod = estimate, std_mod = std.all, p_mod = p.value)

# combine
df_table_hyp7_curr <- df_table_hyp7_curr_main %>% left_join(df_table_hyp7_curr_mod)

Results summary across the Big Five traits: trait-specific acceptance goals (Goals) and frequency of self-acceptance behaviors (Frequency) as moderators on the latent change score. *_main* refers to the main effects (change scores) and *_mod* to the moderation effects.

kable(df_table_hyp7_curr[1:10, ], digits = 3)
trait moderator est_main std_main p_main est_mod std_mod p_mod
extraversion Goals 0.092 0.345 0.000 0.052 0.139 0.244
extraversion Frequency 0.089 0.342 0.000 0.041 0.108 0.310
agreeableness Goals 0.024 0.120 0.175 -0.048 -0.163 0.154
agreeableness Frequency 0.027 0.129 0.144 0.032 0.109 0.321
conscientiousness Goals 0.074 0.212 0.004 0.042 0.092 0.253
conscientiousness Frequency 0.074 0.213 0.004 0.029 0.057 0.478
neuroticism Goals -0.176 -0.474 0.000 -0.010 -0.018 0.824
neuroticism Frequency -0.176 -0.472 0.000 -0.118 -0.221 0.018
openness Goals 0.075 0.317 0.001 0.052 0.130 0.201
openness Frequency 0.076 0.317 0.001 0.059 0.168 0.179

Significant main effects except for agreeableness. No moderation effects at the domain level that are significantly different from zero at p < .001:

  • Only at p < .05: The frequency of self-acceptance behaviors moderates changes in current-level neuroticism.

Results summary across the Big Five facets: trait-specific acceptance goals (goals) and frequency of self-acceptance behaviors (frequency) as moderators on the latent change score. *_main* refers to the main effects (change scores) and *_mod* to the moderation effects.

kable(df_table_hyp7_curr[11:40, ], digits = 3)
trait moderator est_main std_main p_main est_mod std_mod p_mod
sociability Goals 0.163 0.369 0.000 0.081 0.183 0.027
sociability Frequency 0.161 0.368 0.000 -0.026 -0.042 0.709
assertiveness Goals 0.060 0.219 0.050 0.037 0.135 0.213
assertiveness Frequency 0.054 0.208 0.061 0.071 0.188 0.153
energy Goals 0.046 0.257 0.017 0.026 0.147 0.120
energy Frequency 0.047 0.257 0.020 0.031 0.116 0.289
compassion Goals 0.045 0.118 0.213 -0.035 -0.093 0.402
compassion Frequency 0.051 0.130 0.168 -0.024 -0.042 0.723
respectfulness Goals 0.020 0.062 0.484 -0.070 -0.212 0.059
respectfulness Frequency 0.024 0.072 0.418 0.044 0.092 0.369
trust Goals 0.095 0.442 0.006 0.088 0.409 0.016
trust Frequency 0.094 0.445 0.007 0.047 0.154 0.409
organization Goals 0.067 0.142 0.109 0.018 0.037 0.661
organization Frequency 0.065 0.139 0.117 0.027 0.040 0.699
productiveness Goals 0.126 0.320 0.001 0.042 0.107 0.231
productiveness Frequency 0.127 0.323 0.001 0.085 0.149 0.166
responsibility Goals 0.019 0.107 0.291 0.026 0.141 0.183
responsibility Frequency 0.019 0.106 0.296 -0.009 -0.035 0.737
anxiety Goals -0.185 -0.451 0.000 0.012 0.029 0.769
anxiety Frequency -0.189 -0.457 0.000 -0.183 -0.312 0.010
depression Goals -0.128 -0.446 0.000 -0.016 -0.055 0.479
depression Frequency -0.127 -0.446 0.000 -0.100 -0.245 0.018
volatility Goals -0.132 -0.325 0.001 -0.076 -0.187 0.065
volatility Frequency -0.133 -0.327 0.001 0.008 0.015 0.906
curiosity Goals 0.061 NA 0.010 0.057 NA 0.008
curiosity Frequency 0.060 NA 0.011 0.050 NA 0.194
aesthetic Goals -0.001 -0.011 0.923 -0.004 -0.031 0.779
aesthetic Frequency -0.001 -0.010 0.932 0.045 0.245 0.108
imagination Goals 0.131 0.482 0.000 0.040 0.148 0.250
imagination Frequency 0.132 0.485 0.000 0.016 0.041 0.787

No moderation effects at the facet level that are significantly different from zero at p < .001:

  • Only at p < .05: The facet-specific acceptance goal moderates changes in current-level trust.
  • Only at p < .05: The frequency of self-acceptance behaviors moderates changes in current-level anxiety.
  • Only at p < .05: The frequency of self-acceptance behaviors moderates changes in current-level depression.
  • Only at p < .05: The facet-specific acceptance goal moderates changes in current-level curiosity.

Prepare data frame for plotting:

Show the code
df_table_hyp7_plot_curr <- bind_rows(
  #traits
  params_lcs_extra_curr_specif_hyp7 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_curr_frequ_hyp7 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_curr_specif_hyp7 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_curr_frequ_hyp7 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_curr_specif_hyp7 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_curr_frequ_hyp7 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_curr_specif_hyp7 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_curr_frequ_hyp7 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_curr_specif_hyp7 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_curr_frequ_hyp7 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_curr_specif_hyp7 %>% filter(term=="d_socia_1 ~ sa07_01_t1"),
  params_lcs_socia_curr_frequ_hyp7 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_curr_specif_hyp7 %>% filter(term=="d_asser_1 ~ sa07_02_t1"),
  params_lcs_asser_curr_frequ_hyp7 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_curr_specif_hyp7 %>% filter(term=="d_energ_1 ~ sa07_03_t1"),
  params_lcs_energ_curr_frequ_hyp7 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_curr_specif_hyp7 %>% filter(term=="d_compa_1 ~ sa07_04_t1"),
  params_lcs_compa_curr_frequ_hyp7 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_curr_specif_hyp7 %>% filter(term=="d_respe_1 ~ sa07_05_t1"),
  params_lcs_respe_curr_frequ_hyp7 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_curr_specif_hyp7 %>% filter(term=="d_trust_1 ~ sa07_06_t1"),
  params_lcs_trust_curr_frequ_hyp7 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_curr_specif_hyp7 %>% filter(term=="d_organ_1 ~ sa07_07_t1"),
  params_lcs_organ_curr_frequ_hyp7 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_curr_specif_hyp7 %>% filter(term=="d_produ_1 ~ sa07_08_t1"),
  params_lcs_produ_curr_frequ_hyp7 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_curr_specif_hyp7 %>% filter(term=="d_respo_1 ~ sa07_09_t1"),
  params_lcs_respo_curr_frequ_hyp7 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_curr_specif_hyp7 %>% filter(term=="d_anxie_1 ~ sa07_10_t1"),
  params_lcs_anxie_curr_frequ_hyp7 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_curr_specif_hyp7 %>% filter(term=="d_depre_1 ~ sa07_11_t1"),
  params_lcs_depre_curr_frequ_hyp7 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_curr_specif_hyp7 %>% filter(term=="d_volat_1 ~ sa07_12_t1"),
  params_lcs_volat_curr_frequ_hyp7 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_curr_specif_hyp7 %>% filter(term=="d_curio_1 ~ sa07_13_t1"),
  params_lcs_curio_curr_frequ_hyp7 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_curr_specif_hyp7 %>% filter(term=="d_aesth_1 ~ sa07_14_t1"),
  params_lcs_aesth_curr_frequ_hyp7 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_curr_specif_hyp7 %>% filter(term=="d_imagi_1 ~ sa07_15_t1"),
  params_lcs_imagi_curr_frequ_hyp7 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("Goals", "Frequency"), 20)) %>% 
  select(trait, moderator, estimate, 
         ci999lo, ci999hi, ci95lo, ci95hi, std.all, statistic, p.value)

df_table_hyp7_plot_curr <- df_table_hyp7_plot_curr %>% 
  mutate(include_0 = ifelse(ci999lo < 0 & ci999hi > 0, "n.s.", "*")) %>% 
  mutate(ref = factor("Current", levels = c("Current"), labels = c("Current"))) %>% 
  mutate(moderator = factor(moderator, levels = c("Goals", "Frequency"), 
                            labels = c("Goals", "Frequency"))) %>% 
  mutate(trait = factor(trait, levels = names(b5_vars), 
                        labels = stringr::str_to_title(names(b5_vars))))

Plotting the effect size across all analyses:

  • Current = current-level personality
  • Goals = specific, facet-level acceptance goal(s) as moderator
  • Frequency = frequency of self-acceptance behavior as moderator

Important: these show both 99.9% and 95% confidence intervals (for better visual comparability with Study 1 plot)

Show the code
ggplot(df_table_hyp7_plot_curr, aes(x = fct_rev(trait), y = estimate, color = include_0)) +
  geom_hline(yintercept=0, linetype = 3) +
  geom_point(size=3, position=position_dodge(0.4)) + 
  geom_errorbar(aes(ymin = ci999lo, ymax = ci999hi, color = include_0), width=.2,
                position=position_dodge(0.4), size = 0.2, alpha = 0.75) +
  geom_errorbar(aes(ymin = ci95lo, ymax = ci95hi, color = include_0), width=.2,
                position=position_dodge(0.4)) +
  scale_color_manual(values = c("#A9A9A9", "#000000")) + # reversed here because all n.s.
  facet_wrap( ~ ref + moderator, ncol = 2) +
  theme_bw() +
  scale_shape_manual(values=c(18)) + 
  ylab("Effect Estimates (99.9% / 95% CI)") +
  xlab("") +
  theme(legend.title=element_blank()) +
  theme(legend.text=element_text(size=12)) +
  coord_flip() +
  theme(strip.text.x = element_text(size = 12)) +
  theme(axis.text.x=element_text(size=10, angle = 45, hjust = 1), axis.text.y=element_text(size=12)) + 
  guides(color="none")


6.8 Differences in change across intervention groups (Hyp 6 in paper)

Change in psychological well-being indicators as well as the difference between real- and ideal-personality will differ across groups at follow-up. Based on exploratory results from Study 1, we expect that the self-acceptance intervention leads to more pronounced well-being gains and less pronounced differences between current- and ideal-personality personality compared to the self-improvement intervention.

6.8.1 Latent well-being change: acceptance vs. improvement

6.8.1.1 Life satisfaction

Life satisfaction: fitting multi-group models

Show the code
# adapt latent change score model from above and add grouping factor in estimation (also add vectorized equality constraints to the model)

# configural invariance
mi_lcs_swls_group_config <- '
swls_t1 =~ 1*sw06_01_t1 + c("lamb2a", "lamb2b")*sw06_02_t1 + c("lamb3a", "lamb3b")*sw06_03_t1 + c("lamb4a", "lamb4b")*sw06_04_t1 # This specifies the measurement model for swls_t1 
swls_t2 =~ 1*sw06_01_t2 + c("lamb2a", "lamb2b")*sw06_02_t2 + c("lamb3a", "lamb3b")*sw06_03_t2 + c("lamb4a", "lamb4b")*sw06_04_t2 # This specifies the measurement model for swls_t2 with the equality constrained factor loadings

swls_t2 ~ 1*swls_t1     # This parameter regresses swls_t2 perfectly on swls_t1
d_swls_1 =~ 1*swls_t2   # This defines the latent change score factor as measured perfectly by scores on swls_t2
swls_t2 ~ 0*1           # This line constrains the intercept of swls_t2 to 0
swls_t2 ~~ 0*swls_t2    # This fixes the variance of swls_t2 to 0

d_swls_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
swls_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of swls_t1 
d_swls_1 ~~ c("d_var_a", "d_var_b")*d_swls_1   # This estimates the variance of the change scores 
swls_t1 ~~ c("wb_var_a", "wb_var_b")*swls_t1     # This estimates the variance of the swls_t1 
d_swls_1 ~~ c("fb_a", "fb_b")*swls_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

sw06_01_t1 ~~ c("cov1a", "cov1b")*sw06_01_t2   # This allows residual covariance on indicator X1 across T1 and T2
sw06_02_t1 ~~ c("cov2a", "cov2b")*sw06_02_t2   # This allows residual covariance on indicator X2 across T1 and T2
sw06_03_t1 ~~ c("cov3a", "cov3b")*sw06_03_t2   # This allows residual covariance on indicator X3 across T1 and T2
sw06_04_t1 ~~ c("cov4a", "cov4b")*sw06_04_t2   # This allows residual covariance on indicator X4 across T1 and T2

sw06_01_t1 ~~ c("res1a", "res1b")*sw06_01_t1   # This allows residual variance on indicator X1 at T1 
sw06_02_t1 ~~ c("res2a", "res2b")*sw06_02_t1   # This allows residual variance on indicator X2 at T1
sw06_03_t1 ~~ c("res3a", "res3b")*sw06_03_t1   # This allows residual variance on indicator X3 at T1
sw06_04_t1 ~~ c("res4a", "res4b")*sw06_04_t1   # This allows residual variance on indicator X4 at T1

sw06_01_t2 ~~ c("res1a", "res1b")*sw06_01_t2  # This allows residual variance on indicator X1 at T2 
sw06_02_t2 ~~ c("res2a", "res2b")*sw06_02_t2  # This allows residual variance on indicator X2 at T2 
sw06_03_t2 ~~ c("res3a", "res3b")*sw06_03_t2  # This allows residual variance on indicator X3 at T2
sw06_04_t2 ~~ c("res4a", "res4b")*sw06_04_t2  # This allows residual variance on indicator X4 at T2

sw06_01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
sw06_02_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
sw06_03_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1
sw06_04_t1 ~ c("m4a", "m4b")*1     # This estimates the intercept of X4 at T1

sw06_01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
sw06_02_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
sw06_03_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
sw06_04_t2 ~ c("m4a", "m4b")*1     # This estimates the intercept of X4 at T2
'
lcs_swls_group_config <- sem(mi_lcs_swls_group_config, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', 
                             fixed.x=FALSE, missing='fiml', group = "rando")

# weak invariance
mi_lcs_swls_group_weak <- '
swls_t1 =~ 1*sw06_01_t1 + c("lamb2", "lamb2")*sw06_02_t1 + c("lamb3", "lamb3")*sw06_03_t1 + c("lamb4", "lamb4")*sw06_04_t1 # This specifies the measurement model for swls_t1 
swls_t2 =~ 1*sw06_01_t2 + c("lamb2", "lamb2")*sw06_02_t2 + c("lamb3", "lamb3")*sw06_03_t2 + c("lamb4", "lamb4")*sw06_04_t2 # This specifies the measurement model for swls_t2 with the equality constrained factor loadings

swls_t2 ~ 1*swls_t1     # This parameter regresses swls_t2 perfectly on swls_t1
d_swls_1 =~ 1*swls_t2   # This defines the latent change score factor as measured perfectly by scores on swls_t2
swls_t2 ~ 0*1           # This line constrains the intercept of swls_t2 to 0
swls_t2 ~~ 0*swls_t2    # This fixes the variance of swls_t2 to 0

d_swls_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
swls_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of swls_t1 
d_swls_1 ~~ c("d_var_a", "d_var_b")*d_swls_1   # This estimates the variance of the change scores 
swls_t1 ~~ c("wb_var_a", "wb_var_b")*swls_t1     # This estimates the variance of the swls_t1 
d_swls_1 ~~ c("fb_a", "fb_b")*swls_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

sw06_01_t1 ~~ c("cov1a", "cov1b")*sw06_01_t2   # This allows residual covariance on indicator X1 across T1 and T2
sw06_02_t1 ~~ c("cov2a", "cov2b")*sw06_02_t2   # This allows residual covariance on indicator X2 across T1 and T2
sw06_03_t1 ~~ c("cov3a", "cov3b")*sw06_03_t2   # This allows residual covariance on indicator X3 across T1 and T2
sw06_04_t1 ~~ c("cov4a", "cov4b")*sw06_04_t2   # This allows residual covariance on indicator X4 across T1 and T2

sw06_01_t1 ~~ c("res1a", "res1b")*sw06_01_t1   # This allows residual variance on indicator X1 at T1 
sw06_02_t1 ~~ c("res2a", "res2b")*sw06_02_t1   # This allows residual variance on indicator X2 at T1
sw06_03_t1 ~~ c("res3a", "res3b")*sw06_03_t1   # This allows residual variance on indicator X3 at T1
sw06_04_t1 ~~ c("res4a", "res4b")*sw06_04_t1   # This allows residual variance on indicator X4 at T1

sw06_01_t2 ~~ c("res1a", "res1b")*sw06_01_t2  # This allows residual variance on indicator X1 at T2 
sw06_02_t2 ~~ c("res2a", "res2b")*sw06_02_t2  # This allows residual variance on indicator X2 at T2 
sw06_03_t2 ~~ c("res3a", "res3b")*sw06_03_t2  # This allows residual variance on indicator X3 at T2
sw06_04_t2 ~~ c("res4a", "res4b")*sw06_04_t2  # This allows residual variance on indicator X4 at T2

sw06_01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
sw06_02_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
sw06_03_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1
sw06_04_t1 ~ c("m4a", "m4b")*1     # This estimates the intercept of X4 at T1

sw06_01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
sw06_02_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
sw06_03_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
sw06_04_t2 ~ c("m4a", "m4b")*1     # This estimates the intercept of X4 at T2
'

lcs_swls_group_weak <- sem(mi_lcs_swls_group_weak, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml', 
                           group = "rando", group.equal = "loadings")

# strong invariance
mi_lcs_swls_group_strong <- '
swls_t1 =~ 1*sw06_01_t1 + c("lamb2", "lamb2")*sw06_02_t1 + c("lamb3", "lamb3")*sw06_03_t1 + c("lamb4", "lamb4")*sw06_04_t1 # This specifies the measurement model for swls_t1 
swls_t2 =~ 1*sw06_01_t2 + c("lamb2", "lamb2")*sw06_02_t2 + c("lamb3", "lamb3")*sw06_03_t2 + c("lamb4", "lamb4")*sw06_04_t2 # This specifies the measurement model for swls_t2 with the equality constrained factor loadings

swls_t2 ~ 1*swls_t1     # This parameter regresses swls_t2 perfectly on swls_t1
d_swls_1 =~ 1*swls_t2   # This defines the latent change score factor as measured perfectly by scores on swls_t2
swls_t2 ~ 0*1           # This line constrains the intercept of swls_t2 to 0
swls_t2 ~~ 0*swls_t2    # This fixes the variance of swls_t2 to 0

d_swls_1 ~ c("d_int", "d_int")*1           # This estimates the intercept of the change score 
swls_t1 ~ c("wb_int", "wb_int")*1            # This estimates the intercept of swls_t1 
d_swls_1 ~~ c("d_var_a", "d_var_b")*d_swls_1   # This estimates the variance of the change scores 
swls_t1 ~~ c("wb_var_a", "wb_var_b")*swls_t1     # This estimates the variance of the swls_t1 
d_swls_1 ~~ c("fb_a", "fb_b")*swls_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

sw06_01_t1 ~~ c("cov1a", "cov1b")*sw06_01_t2   # This allows residual covariance on indicator X1 across T1 and T2
sw06_02_t1 ~~ c("cov2a", "cov2b")*sw06_02_t2   # This allows residual covariance on indicator X2 across T1 and T2
sw06_03_t1 ~~ c("cov3a", "cov3b")*sw06_03_t2   # This allows residual covariance on indicator X3 across T1 and T2
sw06_04_t1 ~~ c("cov4a", "cov4b")*sw06_04_t2   # This allows residual covariance on indicator X4 across T1 and T2

sw06_01_t1 ~~ c("res1a", "res1b")*sw06_01_t1   # This allows residual variance on indicator X1 at T1 
sw06_02_t1 ~~ c("res2a", "res2b")*sw06_02_t1   # This allows residual variance on indicator X2 at T1
sw06_03_t1 ~~ c("res3a", "res3b")*sw06_03_t1   # This allows residual variance on indicator X3 at T1
sw06_04_t1 ~~ c("res4a", "res4b")*sw06_04_t1   # This allows residual variance on indicator X4 at T1

sw06_01_t2 ~~ c("res1a", "res1b")*sw06_01_t2  # This allows residual variance on indicator X1 at T2 
sw06_02_t2 ~~ c("res2a", "res2b")*sw06_02_t2  # This allows residual variance on indicator X2 at T2 
sw06_03_t2 ~~ c("res3a", "res3b")*sw06_03_t2  # This allows residual variance on indicator X3 at T2
sw06_04_t2 ~~ c("res4a", "res4b")*sw06_04_t2  # This allows residual variance on indicator X4 at T2

sw06_01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
sw06_02_t1 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T1
sw06_03_t1 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T1
sw06_04_t1 ~ c("m4", "m4")*1     # This estimates the intercept of X4 at T1

sw06_01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
sw06_02_t2 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T2
sw06_03_t2 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T2
sw06_04_t2 ~ c("m4", "m4")*1     # This estimates the intercept of X4 at T2
'

lcs_swls_group_strong <- sem(mi_lcs_swls_group_strong, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml', 
                             group = "rando", group.equal = c("intercepts", "loadings"))

Life satisfaction: results

# model comparison tests for measurement invariance
lavTestLRT(lcs_swls_group_config, lcs_swls_group_weak, lcs_swls_group_strong)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                      Df   AIC   BIC  Chisq Chisq diff Df diff Pr(>Chisq)
lcs_swls_group_config 50 13077 13248 125.00                              
lcs_swls_group_weak   53 13073 13231 127.59     3.1604       3     0.3675
lcs_swls_group_strong 58 13066 13202 130.93     3.3369       5     0.6482
# show model with varying latent change parameters 
# -> key parameter is "d_swls_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_swls <- broom::tidy(lcs_swls_group_weak, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_wb_st2 %>% filter(trait=="swls" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_swls_1 ~1 "))
kable(params_main_lcs_swls, digits = 3) 
term label estimate beta std.all statistic p.value
d_swls_1 ~1 d_int_a 0.246 0.248 0.419 5.644 0
d_swls_1 ~1 d_int_b 0.296 0.298 0.415 6.155 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(lcs_swls_group_strong, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_wb_st2 %>% filter(trait=="swls" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_swls_1 ~1 ")), digits = 3) 
term label estimate beta std.all statistic p.value
d_swls_1 ~1 d_int 0.267 0.269 0.454 8.195 0
d_swls_1 ~1 d_int 0.267 0.269 0.374 8.195 0

Slightly more positive change in life satisfaction in the self-improvement group but no substantial differences according to the LRTs.

# whole model (weak invariance)
summary(lcs_swls_group_weak, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 57 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        58
  Number of equality constraints                    23

  Number of observations per group:               Used       Total
    Self-Acceptance                                336         336
    Self-Improvement                               337         338
  Number of missing patterns per group:                           
    Self-Acceptance                                  2            
    Self-Improvement                                 2            

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                               127.587     114.982
  Degrees of freedom                                53          53
  P-value (Chi-square)                           0.000       0.000
  Scaling correction factor                                  1.110
    Yuan-Bentler correction (Mplus variant)                       
  Test statistic for each group:
    Self-Acceptance                             68.718      61.929
    Self-Improvement                            58.869      53.053

Model Test Baseline Model:

  Test statistic                              3183.172    2343.602
  Degrees of freedom                                56          56
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.358

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.976       0.973
  Tucker-Lewis Index (TLI)                       0.975       0.971
                                                                  
  Robust Comparative Fit Index (CFI)                         0.978
  Robust Tucker-Lewis Index (TLI)                            0.977

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -6501.579   -6501.579
  Scaling correction factor                                  0.703
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -6437.786   -6437.786
  Scaling correction factor                                  1.132
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                               13073.158   13073.158
  Bayesian (BIC)                             13231.070   13231.070
  Sample-size adjusted Bayesian (SABIC)      13119.942   13119.942

Root Mean Square Error of Approximation:

  RMSEA                                          0.065       0.059
  90 Percent confidence interval - lower         0.050       0.045
  90 Percent confidence interval - upper         0.079       0.073
  P-value H_0: RMSEA <= 0.050                    0.046       0.140
  P-value H_0: RMSEA >= 0.080                    0.040       0.006
                                                                  
  Robust RMSEA                                               0.065
  90 Percent confidence interval - lower                     0.048
  90 Percent confidence interval - upper                     0.082
  P-value H_0: Robust RMSEA <= 0.050                         0.073
  P-value H_0: Robust RMSEA >= 0.080                         0.068

Standardized Root Mean Square Residual:

  SRMR                                           0.035       0.035

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian


Group 1 [Self-Acceptance]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t1 =~                                                            
    s06_01_           1.000                               0.993    0.839
    s06_02_ (lmb2)    0.885    0.029   30.812    0.000    0.879    0.775
    s06_03_ (lmb3)    1.038    0.031   33.314    0.000    1.031    0.858
    s06_04_ (lmb4)    0.909    0.031   29.375    0.000    0.903    0.721
  swls_t2 =~                                                            
    s06_01_           1.000                               1.052    0.853
    s06_02_ (lmb2)    0.885    0.029   30.812    0.000    0.931    0.793
    s06_03_ (lmb3)    1.038    0.031   33.314    0.000    1.092    0.870
    s06_04_ (lmb4)    0.909    0.031   29.375    0.000    0.956    0.741
  d_swls_1 =~                                                           
    swls_t2           1.000                               0.559    0.559

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t2 ~                                                             
    swls_t1           1.000                               0.944    0.944

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t1 ~~                                                            
    d_swl_1 (fb_a)   -0.113    0.040   -2.791    0.005   -0.193   -0.193
 .sw06_01_t1 ~~                                                         
   .s06_01_ (cov1)    0.050    0.044    1.136    0.256    0.050    0.121
 .sw06_02_t1 ~~                                                         
   .s06_02_ (cov2)    0.210    0.043    4.924    0.000    0.210    0.408
 .sw06_03_t1 ~~                                                         
   .s06_03_ (cov3)    0.034    0.040    0.859    0.390    0.034    0.089
 .sw06_04_t1 ~~                                                         
   .s06_04_ (cov4)    0.289    0.064    4.514    0.000    0.289    0.384

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .swls_t2           0.000                               0.000    0.000
    d_swl_1 (d_n_)    0.246    0.044    5.644    0.000    0.419    0.419
    swls_t1 (wb__)    2.742    0.062   43.993    0.000    2.761    2.761
   .s06_01_           0.000                               0.000    0.000
   .s06_02_  (m2a)    0.499    0.098    5.078    0.000    0.499    0.440
   .s06_03_  (m3a)    0.025    0.102    0.250    0.803    0.025    0.021
   .s06_04_  (m4a)    0.420    0.103    4.096    0.000    0.420    0.336
   .s06_01_           0.000                               0.000    0.000
   .s06_02_  (m2a)    0.499    0.098    5.078    0.000    0.499    0.425
   .s06_03_  (m3a)    0.025    0.102    0.250    0.803    0.025    0.020
   .s06_04_  (m4a)    0.420    0.103    4.096    0.000    0.420    0.326

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .swls_t2           0.000                               0.000    0.000
    d_swl_1 (d_v_)    0.345    0.057    6.039    0.000    1.000    1.000
    swls_t1 (wb__)    0.986    0.075   13.185    0.000    1.000    1.000
   .s06_01_ (res1)    0.414    0.044    9.393    0.000    0.414    0.296
   .s06_02_ (res2)    0.513    0.040   12.737    0.000    0.513    0.399
   .s06_03_ (res3)    0.381    0.038   10.087    0.000    0.381    0.264
   .s06_04_ (res4)    0.752    0.061   12.251    0.000    0.752    0.480
   .s06_01_ (res1)    0.414    0.044    9.393    0.000    0.414    0.272
   .s06_02_ (res2)    0.513    0.040   12.737    0.000    0.513    0.372
   .s06_03_ (res3)    0.381    0.038   10.087    0.000    0.381    0.242
   .s06_04_ (res4)    0.752    0.061   12.251    0.000    0.752    0.451


Group 2 [Self-Improvement]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t1 =~                                                            
    s06_01_           1.000                               0.982    0.815
    s06_02_ (lmb2)    0.885    0.029   30.812    0.000    0.869    0.739
    s06_03_ (lmb3)    1.038    0.031   33.314    0.000    1.019    0.851
    s06_04_ (lmb4)    0.909    0.031   29.375    0.000    0.892    0.706
  swls_t2 =~                                                            
    s06_01_           1.000                               0.958    0.809
    s06_02_ (lmb2)    0.885    0.029   30.812    0.000    0.848    0.731
    s06_03_ (lmb3)    1.038    0.031   33.314    0.000    0.994    0.845
    s06_04_ (lmb4)    0.909    0.031   29.375    0.000    0.871    0.697
  d_swls_1 =~                                                           
    swls_t2           1.000                               0.745    0.745

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t2 ~                                                             
    swls_t1           1.000                               1.025    1.025

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t1 ~~                                                            
    d_swl_1 (fb_b)   -0.278    0.058   -4.758    0.000   -0.397   -0.397
 .sw06_01_t1 ~~                                                         
   .s06_01_ (cv1b)    0.132    0.044    2.974    0.003    0.132    0.272
 .sw06_02_t1 ~~                                                         
   .s06_02_ (cv2b)    0.297    0.057    5.231    0.000    0.297    0.474
 .sw06_03_t1 ~~                                                         
   .s06_03_ (cv3b)    0.068    0.043    1.582    0.114    0.068    0.173
 .sw06_04_t1 ~~                                                         
   .s06_04_ (cv4b)    0.320    0.066    4.823    0.000    0.320    0.400

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .swls_t2           0.000                               0.000    0.000
    d_swl_1 (d_n_)    0.296    0.048    6.155    0.000    0.415    0.415
    swls_t1 (wb__)    2.629    0.063   41.512    0.000    2.679    2.679
   .s06_01_           0.000                               0.000    0.000
   .s06_02_  (m2b)    0.533    0.094    5.691    0.000    0.533    0.453
   .s06_03_  (m3b)    0.106    0.098    1.088    0.277    0.106    0.089
   .s06_04_  (m4b)    0.429    0.102    4.202    0.000    0.429    0.339
   .s06_01_           0.000                               0.000    0.000
   .s06_02_  (m2b)    0.533    0.094    5.691    0.000    0.533    0.459
   .s06_03_  (m3b)    0.106    0.098    1.088    0.277    0.106    0.090
   .s06_04_  (m4b)    0.429    0.102    4.202    0.000    0.429    0.344

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .swls_t2           0.000                               0.000    0.000
    d_swl_1 (d_v_)    0.509    0.082    6.182    0.000    1.000    1.000
    swls_t1 (wb__)    0.963    0.075   12.868    0.000    1.000    1.000
   .s06_01_ (rs1b)    0.485    0.050    9.762    0.000    0.485    0.335
   .s06_02_ (rs2b)    0.627    0.056   11.267    0.000    0.627    0.454
   .s06_03_ (rs3b)    0.395    0.039   10.203    0.000    0.395    0.276
   .s06_04_ (rs4b)    0.800    0.063   12.669    0.000    0.800    0.501
   .s06_01_ (rs1b)    0.485    0.050    9.762    0.000    0.485    0.346
   .s06_02_ (rs2b)    0.627    0.056   11.267    0.000    0.627    0.466
   .s06_03_ (rs3b)    0.395    0.039   10.203    0.000    0.395    0.286
   .s06_04_ (rs4b)    0.800    0.063   12.669    0.000    0.800    0.514
6.8.1.2 Meaning in life

Meaning in life: fitting multi-group models

Show the code
# adapt latent change score model from above and add grouping factor in estimation (also add vectorized equality constraints to the model)

# configural invariance
mi_lcs_meaning_group_config <- '
meaning_t1 =~ 1*meaning_par1_t1 + c("lamb2a", "lamb2b")*meaning_par2_t1 + c("lamb3a", "lamb3b")*meaning_par3_t1 # This specifies the measurement model for meaning_t1 
meaning_t2 =~ 1*meaning_par1_t2 + c("lamb2a", "lamb2b")*meaning_par2_t2 + c("lamb3a", "lamb3b")*meaning_par3_t2 # This specifies the measurement model for meaning_t2 with the equality constrained factor loadings

meaning_t2 ~ 1*meaning_t1     # This parameter regresses meaning_t2 perfectly on meaning_t1
d_meaning_1 =~ 1*meaning_t2   # This defines the latent change score factor as measured perfectly by scores on meaning_t2
meaning_t2 ~ 0*1           # This line constrains the intercept of meaning_t2 to 0
meaning_t2 ~~ 0*meaning_t2    # This fixes the variance of meaning_t2 to 0

d_meaning_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
meaning_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of meaning_t1 
d_meaning_1 ~~ c("d_var_a", "d_var_b")*d_meaning_1   # This estimates the variance of the change scores 
meaning_t1 ~~ c("wb_var_a", "wb_var_b")*meaning_t1     # This estimates the variance of the meaning_t1 
d_meaning_1 ~~ c("fb_a", "fb_b")*meaning_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

meaning_par1_t1 ~~ c("cov1a", "cov1b")*meaning_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
meaning_par2_t1 ~~ c("cov2a", "cov2b")*meaning_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
meaning_par3_t1 ~~ c("cov3a", "cov3b")*meaning_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

meaning_par1_t1 ~~ c("res1a", "res1b")*meaning_par1_t1   # This allows residual variance on indicator X1 at T1 
meaning_par2_t1 ~~ c("res2a", "res2b")*meaning_par2_t1   # This allows residual variance on indicator X2 at T1
meaning_par3_t1 ~~ c("res3a", "res3b")*meaning_par3_t1   # This allows residual variance on indicator X3 at T1

meaning_par1_t2 ~~ c("res1a", "res1b")*meaning_par1_t2  # This allows residual variance on indicator X1 at T2 
meaning_par2_t2 ~~ c("res2a", "res2b")*meaning_par2_t2  # This allows residual variance on indicator X2 at T2 
meaning_par3_t2 ~~ c("res3a", "res3b")*meaning_par3_t2  # This allows residual variance on indicator X3 at T2

meaning_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
meaning_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
meaning_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

meaning_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
meaning_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
meaning_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'
lcs_meaning_group_config <- sem(mi_lcs_meaning_group_config, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', 
                                fixed.x=FALSE, missing='fiml', group = "rando")

# weak invariance
mi_lcs_meaning_group_weak <- '
meaning_t1 =~ 1*meaning_par1_t1 + c("lamb2", "lamb2")*meaning_par2_t1 + c("lamb3", "lamb3")*meaning_par3_t1 # This specifies the measurement model for meaning_t1 
meaning_t2 =~ 1*meaning_par1_t2 + c("lamb2", "lamb2")*meaning_par2_t2 + c("lamb3", "lamb3")*meaning_par3_t2 # This specifies the measurement model for meaning_t2 with the equality constrained factor loadings

meaning_t2 ~ 1*meaning_t1     # This parameter regresses meaning_t2 perfectly on meaning_t1
d_meaning_1 =~ 1*meaning_t2   # This defines the latent change score factor as measured perfectly by scores on meaning_t2
meaning_t2 ~ 0*1           # This line constrains the intercept of meaning_t2 to 0
meaning_t2 ~~ 0*meaning_t2    # This fixes the variance of meaning_t2 to 0

d_meaning_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
meaning_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of meaning_t1 
d_meaning_1 ~~ c("d_var_a", "d_var_b")*d_meaning_1   # This estimates the variance of the change scores 
meaning_t1 ~~ c("wb_var_a", "wb_var_b")*meaning_t1     # This estimates the variance of the meaning_t1 
d_meaning_1 ~~ c("fb_a", "fb_b")*meaning_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

meaning_par1_t1 ~~ c("cov1a", "cov1b")*meaning_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
meaning_par2_t1 ~~ c("cov2a", "cov2b")*meaning_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
meaning_par3_t1 ~~ c("cov3a", "cov3b")*meaning_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

meaning_par1_t1 ~~ c("res1a", "res1b")*meaning_par1_t1   # This allows residual variance on indicator X1 at T1 
meaning_par2_t1 ~~ c("res2a", "res2b")*meaning_par2_t1   # This allows residual variance on indicator X2 at T1
meaning_par3_t1 ~~ c("res3a", "res3b")*meaning_par3_t1   # This allows residual variance on indicator X3 at T1

meaning_par1_t2 ~~ c("res1a", "res1b")*meaning_par1_t2  # This allows residual variance on indicator X1 at T2 
meaning_par2_t2 ~~ c("res2a", "res2b")*meaning_par2_t2  # This allows residual variance on indicator X2 at T2 
meaning_par3_t2 ~~ c("res3a", "res3b")*meaning_par3_t2  # This allows residual variance on indicator X3 at T2

meaning_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
meaning_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
meaning_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

meaning_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
meaning_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
meaning_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

lcs_meaning_group_weak <- sem(mi_lcs_meaning_group_weak, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml', 
                           group = "rando", group.equal = "loadings")

# strong invariance
mi_lcs_meaning_group_strong <- '
meaning_t1 =~ 1*meaning_par1_t1 + c("lamb2", "lamb2")*meaning_par2_t1 + c("lamb3", "lamb3")*meaning_par3_t1 # This specifies the measurement model for meaning_t1 
meaning_t2 =~ 1*meaning_par1_t2 + c("lamb2", "lamb2")*meaning_par2_t2 + c("lamb3", "lamb3")*meaning_par3_t2 # This specifies the measurement model for meaning_t2 with the equality constrained factor loadings

meaning_t2 ~ 1*meaning_t1     # This parameter regresses meaning_t2 perfectly on meaning_t1
d_meaning_1 =~ 1*meaning_t2   # This defines the latent change score factor as measured perfectly by scores on meaning_t2
meaning_t2 ~ 0*1           # This line constrains the intercept of meaning_t2 to 0
meaning_t2 ~~ 0*meaning_t2    # This fixes the variance of meaning_t2 to 0

d_meaning_1 ~ c("d_int", "d_int")*1           # This estimates the intercept of the change score 
meaning_t1 ~ c("wb_int", "wb_int")*1            # This estimates the intercept of meaning_t1 
d_meaning_1 ~~ c("d_var_a", "d_var_b")*d_meaning_1   # This estimates the variance of the change scores 
meaning_t1 ~~ c("wb_var_a", "wb_var_b")*meaning_t1     # This estimates the variance of the meaning_t1 
d_meaning_1 ~~ c("fb_a", "fb_b")*meaning_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

meaning_par1_t1 ~~ c("cov1a", "cov1b")*meaning_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
meaning_par2_t1 ~~ c("cov2a", "cov2b")*meaning_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
meaning_par3_t1 ~~ c("cov3a", "cov3b")*meaning_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

meaning_par1_t1 ~~ c("res1a", "res1b")*meaning_par1_t1   # This allows residual variance on indicator X1 at T1 
meaning_par2_t1 ~~ c("res2a", "res2b")*meaning_par2_t1   # This allows residual variance on indicator X2 at T1
meaning_par3_t1 ~~ c("res3a", "res3b")*meaning_par3_t1   # This allows residual variance on indicator X3 at T1

meaning_par1_t2 ~~ c("res1a", "res1b")*meaning_par1_t2  # This allows residual variance on indicator X1 at T2 
meaning_par2_t2 ~~ c("res2a", "res2b")*meaning_par2_t2  # This allows residual variance on indicator X2 at T2 
meaning_par3_t2 ~~ c("res3a", "res3b")*meaning_par3_t2  # This allows residual variance on indicator X3 at T2

meaning_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
meaning_par2_t1 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T1
meaning_par3_t1 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T1

meaning_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
meaning_par2_t2 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T2
meaning_par3_t2 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T2
'

lcs_meaning_group_strong <- sem(mi_lcs_meaning_group_strong, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml', 
                             group = "rando", group.equal = c("intercepts", "loadings"))

Meaning in life: results

# model comparison tests for measurement invariance
lavTestLRT(lcs_meaning_group_config, lcs_meaning_group_weak, lcs_meaning_group_strong)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                         Df    AIC    BIC  Chisq Chisq diff Df diff Pr(>Chisq)
lcs_meaning_group_config 24 9552.9 9688.3 49.776                              
lcs_meaning_group_weak   26 9550.4 9676.8 51.287     1.5699       2     0.4561
lcs_meaning_group_strong 30 9543.8 9652.0 52.632     1.3465       4     0.8534
# show model with varying latent change parameters 
# -> key parameter is "d_meaning_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_meaning <- broom::tidy(lcs_meaning_group_weak, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_wb_st2 %>% filter(trait=="meaning" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_meaning_1 ~1 "))
kable(params_main_lcs_meaning, digits = 3) 
term label estimate beta std.all statistic p.value
d_meaning_1 ~1 d_int_a 0.196 0.169 0.321 4.679 0
d_meaning_1 ~1 d_int_b 0.230 0.198 0.319 4.855 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(lcs_meaning_group_strong, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_wb_st2 %>% filter(trait=="meaning" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_meaning_1 ~1 ")), digits = 3) 
term label estimate beta std.all statistic p.value
d_meaning_1 ~1 d_int 0.211 0.181 0.344 6.659 0
d_meaning_1 ~1 d_int 0.211 0.181 0.292 6.659 0

Slightly more positive change in meaning in life in the Self-Improvement group but no substantial differences according to the LRTs.

# whole model (weak invariance)
summary(lcs_meaning_group_weak, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 58 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        44
  Number of equality constraints                    16

  Number of observations per group:               Used       Total
    Self-Acceptance                                336         336
    Self-Improvement                               337         338
  Number of missing patterns per group:                           
    Self-Acceptance                                  2            
    Self-Improvement                                 2            

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                                51.287      46.282
  Degrees of freedom                                26          26
  P-value (Chi-square)                           0.002       0.008
  Scaling correction factor                                  1.108
    Yuan-Bentler correction (Mplus variant)                       
  Test statistic for each group:
    Self-Acceptance                             29.436      26.563
    Self-Improvement                            21.851      19.719

Model Test Baseline Model:

  Test statistic                              2949.985    2233.784
  Degrees of freedom                                30          30
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.321

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.991       0.991
  Tucker-Lewis Index (TLI)                       0.990       0.989
                                                                  
  Robust Comparative Fit Index (CFI)                         0.992
  Robust Tucker-Lewis Index (TLI)                            0.990

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -4747.211   -4747.211
  Scaling correction factor                                  0.749
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -4721.568   -4721.568
  Scaling correction factor                                  1.144
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                                9550.422    9550.422
  Bayesian (BIC)                              9676.751    9676.751
  Sample-size adjusted Bayesian (SABIC)       9587.848    9587.848

Root Mean Square Error of Approximation:

  RMSEA                                          0.054       0.048
  90 Percent confidence interval - lower         0.032       0.026
  90 Percent confidence interval - upper         0.075       0.069
  P-value H_0: RMSEA <= 0.050                    0.361       0.529
  P-value H_0: RMSEA >= 0.080                    0.021       0.005
                                                                  
  Robust RMSEA                                               0.055
  90 Percent confidence interval - lower                     0.028
  90 Percent confidence interval - upper                     0.080
  P-value H_0: Robust RMSEA <= 0.050                         0.351
  P-value H_0: Robust RMSEA >= 0.080                         0.047

Standardized Root Mean Square Residual:

  SRMR                                           0.033       0.033

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian


Group 1 [Self-Acceptance]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t1 =~                                                         
    mnn_1_1           1.000                               1.002    0.814
    mnn_2_1 (lmb2)    1.201    0.035   34.437    0.000    1.204    0.929
    mnn_3_1 (lmb3)    1.168    0.035   33.501    0.000    1.170    0.885
  meaning_t2 =~                                                         
    mnn_1_2           1.000                               0.958    0.802
    mnn_2_2 (lmb2)    1.201    0.035   34.437    0.000    1.151    0.923
    mnn_3_2 (lmb3)    1.168    0.035   33.501    0.000    1.119    0.877
  d_meaning_1 =~                                                        
    mnng_t2           1.000                               0.638    0.638

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t2 ~                                                          
    meaning_t1        1.000                               1.045    1.045

Covariances:
                     Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t1 ~~                                                           
    d_mnn_1 (fb_a)     -0.230    0.048   -4.744    0.000   -0.375   -0.375
 .meaning_par1_t1 ~~                                                      
   .mnn_1_2 (cov1)      0.207    0.043    4.842    0.000    0.207    0.406
 .meaning_par2_t1 ~~                                                      
   .mnn_2_2 (cov2)      0.027    0.033    0.830    0.407    0.027    0.118
 .meaning_par3_t1 ~~                                                      
   .mnn_3_2 (cov3)      0.153    0.038    4.081    0.000    0.153    0.406

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .mnng_t2           0.000                               0.000    0.000
    d_mnn_1 (d_n_)    0.196    0.042    4.679    0.000    0.321    0.321
    mnng_t1 (wb__)    3.210    0.064   50.291    0.000    3.204    3.204
   .mnn_1_1           0.000                               0.000    0.000
   .mnn_2_1  (m2a)   -0.048    0.121   -0.393    0.695   -0.048   -0.037
   .mnn_3_1  (m3a)   -0.116    0.118   -0.985    0.324   -0.116   -0.088
   .mnn_1_2           0.000                               0.000    0.000
   .mnn_2_2  (m2a)   -0.048    0.121   -0.393    0.695   -0.048   -0.038
   .mnn_3_2  (m3a)   -0.116    0.118   -0.985    0.324   -0.116   -0.091

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .mnng_t2           0.000                               0.000    0.000
    d_mnn_1 (d_v_)    0.374    0.067    5.571    0.000    1.000    1.000
    mnng_t1 (wb__)    1.004    0.096   10.450    0.000    1.000    1.000
   .mnn_1_1 (res1)    0.510    0.040   12.813    0.000    0.510    0.337
   .mnn_2_1 (res2)    0.230    0.035    6.582    0.000    0.230    0.137
   .mnn_3_1 (res3)    0.377    0.038    9.898    0.000    0.377    0.216
   .mnn_1_2 (res1)    0.510    0.040   12.813    0.000    0.510    0.357
   .mnn_2_2 (res2)    0.230    0.035    6.582    0.000    0.230    0.148
   .mnn_3_2 (res3)    0.377    0.038    9.898    0.000    0.377    0.232


Group 2 [Self-Improvement]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t1 =~                                                         
    mnn_1_1           1.000                               0.951    0.786
    mnn_2_1 (lmb2)    1.201    0.035   34.437    0.000    1.142    0.902
    mnn_3_1 (lmb3)    1.168    0.035   33.501    0.000    1.110    0.854
  meaning_t2 =~                                                         
    mnn_1_2           1.000                               0.958    0.788
    mnn_2_2 (lmb2)    1.201    0.035   34.437    0.000    1.151    0.903
    mnn_3_2 (lmb3)    1.168    0.035   33.501    0.000    1.119    0.856
  d_meaning_1 =~                                                        
    mnng_t2           1.000                               0.753    0.753

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t2 ~                                                          
    meaning_t1        1.000                               0.992    0.992

Covariances:
                     Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t1 ~~                                                           
    d_mnn_1 (fb_b)     -0.254    0.055   -4.640    0.000   -0.369   -0.369
 .meaning_par1_t1 ~~                                                      
   .mnn_1_2 (cv1b)      0.281    0.044    6.434    0.000    0.281    0.502
 .meaning_par2_t1 ~~                                                      
   .mnn_2_2 (cv2b)      0.076    0.040    1.920    0.055    0.076    0.253
 .meaning_par3_t1 ~~                                                      
   .mnn_3_2 (cv3b)      0.137    0.048    2.881    0.004    0.137    0.300

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .mnng_t2           0.000                               0.000    0.000
    d_mnn_1 (d_n_)    0.230    0.047    4.855    0.000    0.319    0.319
    mnng_t1 (wb__)    3.206    0.060   53.091    0.000    3.371    3.371
   .mnn_1_1           0.000                               0.000    0.000
   .mnn_2_1  (m2b)   -0.036    0.123   -0.289    0.772   -0.036   -0.028
   .mnn_3_1  (m3b)   -0.061    0.122   -0.504    0.615   -0.061   -0.047
   .mnn_1_2           0.000                               0.000    0.000
   .mnn_2_2  (m2b)   -0.036    0.123   -0.289    0.772   -0.036   -0.028
   .mnn_3_2  (m3b)   -0.061    0.122   -0.504    0.615   -0.061   -0.047

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .mnng_t2           0.000                               0.000    0.000
    d_mnn_1 (d_v_)    0.521    0.076    6.834    0.000    1.000    1.000
    mnng_t1 (wb__)    0.904    0.085   10.690    0.000    1.000    1.000
   .mnn_1_1 (rs1b)    0.560    0.045   12.505    0.000    0.560    0.382
   .mnn_2_1 (rs2b)    0.300    0.038    7.806    0.000    0.300    0.187
   .mnn_3_1 (rs3b)    0.458    0.049    9.323    0.000    0.458    0.271
   .mnn_1_2 (rs1b)    0.560    0.045   12.505    0.000    0.560    0.379
   .mnn_2_2 (rs2b)    0.300    0.038    7.806    0.000    0.300    0.185
   .mnn_3_2 (rs3b)    0.458    0.049    9.323    0.000    0.458    0.268
6.8.1.3 Self-esteem

Self-esteem: fitting multi-group models

Show the code
# adapt latent change score model from above and add grouping factor in estimation (also add vectorized equality constraints to the model)

# configural invariance
mi_lcs_selfes_group_config <- '
selfes_t1 =~ 1*selfes_par1_t1 + c("lamb2a", "lamb2b")*selfes_par2_t1 + c("lamb3a", "lamb3b")*selfes_par3_t1 # This specifies the measurement model for selfes_t1 
selfes_t2 =~ 1*selfes_par1_t2 + c("lamb2a", "lamb2b")*selfes_par2_t2 + c("lamb3a", "lamb3b")*selfes_par3_t2 # This specifies the measurement model for selfes_t2 with the equality constrained factor loadings

selfes_t2 ~ 1*selfes_t1     # This parameter regresses selfes_t2 perfectly on selfes_t1
d_selfes_1 =~ 1*selfes_t2   # This defines the latent change score factor as measured perfectly by scores on selfes_t2
selfes_t2 ~ 0*1           # This line constrains the intercept of selfes_t2 to 0
selfes_t2 ~~ 0*selfes_t2    # This fixes the variance of selfes_t2 to 0

d_selfes_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
selfes_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of selfes_t1 
d_selfes_1 ~~ c("d_var_a", "d_var_b")*d_selfes_1   # This estimates the variance of the change scores 
selfes_t1 ~~ c("wb_var_a", "wb_var_b")*selfes_t1     # This estimates the variance of the selfes_t1 
d_selfes_1 ~~ c("fb_a", "fb_b")*selfes_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

selfes_par1_t1 ~~ c("cov1a", "cov1b")*selfes_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
selfes_par2_t1 ~~ c("cov2a", "cov2b")*selfes_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
selfes_par3_t1 ~~ c("cov3a", "cov3b")*selfes_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

selfes_par1_t1 ~~ c("res1a", "res1b")*selfes_par1_t1   # This allows residual variance on indicator X1 at T1 
selfes_par2_t1 ~~ c("res2a", "res2b")*selfes_par2_t1   # This allows residual variance on indicator X2 at T1
selfes_par3_t1 ~~ c("res3a", "res3b")*selfes_par3_t1   # This allows residual variance on indicator X3 at T1

selfes_par1_t2 ~~ c("res1a", "res1b")*selfes_par1_t2  # This allows residual variance on indicator X1 at T2 
selfes_par2_t2 ~~ c("res2a", "res2b")*selfes_par2_t2  # This allows residual variance on indicator X2 at T2 
selfes_par3_t2 ~~ c("res3a", "res3b")*selfes_par3_t2  # This allows residual variance on indicator X3 at T2

selfes_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
selfes_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
selfes_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

selfes_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
selfes_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
selfes_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'
lcs_selfes_group_config <- sem(mi_lcs_selfes_group_config, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', 
                                fixed.x=FALSE, missing='fiml', group = "rando")

# weak invariance
mi_lcs_selfes_group_weak <- '
selfes_t1 =~ 1*selfes_par1_t1 + c("lamb2", "lamb2")*selfes_par2_t1 + c("lamb3", "lamb3")*selfes_par3_t1 # This specifies the measurement model for selfes_t1 
selfes_t2 =~ 1*selfes_par1_t2 + c("lamb2", "lamb2")*selfes_par2_t2 + c("lamb3", "lamb3")*selfes_par3_t2 # This specifies the measurement model for selfes_t2 with the equality constrained factor loadings

selfes_t2 ~ 1*selfes_t1     # This parameter regresses selfes_t2 perfectly on selfes_t1
d_selfes_1 =~ 1*selfes_t2   # This defines the latent change score factor as measured perfectly by scores on selfes_t2
selfes_t2 ~ 0*1           # This line constrains the intercept of selfes_t2 to 0
selfes_t2 ~~ 0*selfes_t2    # This fixes the variance of selfes_t2 to 0

d_selfes_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
selfes_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of selfes_t1 
d_selfes_1 ~~ c("d_var_a", "d_var_b")*d_selfes_1   # This estimates the variance of the change scores 
selfes_t1 ~~ c("wb_var_a", "wb_var_b")*selfes_t1     # This estimates the variance of the selfes_t1 
d_selfes_1 ~~ c("fb_a", "fb_b")*selfes_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

selfes_par1_t1 ~~ c("cov1a", "cov1b")*selfes_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
selfes_par2_t1 ~~ c("cov2a", "cov2b")*selfes_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
selfes_par3_t1 ~~ c("cov3a", "cov3b")*selfes_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

selfes_par1_t1 ~~ c("res1a", "res1b")*selfes_par1_t1   # This allows residual variance on indicator X1 at T1 
selfes_par2_t1 ~~ c("res2a", "res2b")*selfes_par2_t1   # This allows residual variance on indicator X2 at T1
selfes_par3_t1 ~~ c("res3a", "res3b")*selfes_par3_t1   # This allows residual variance on indicator X3 at T1

selfes_par1_t2 ~~ c("res1a", "res1b")*selfes_par1_t2  # This allows residual variance on indicator X1 at T2 
selfes_par2_t2 ~~ c("res2a", "res2b")*selfes_par2_t2  # This allows residual variance on indicator X2 at T2 
selfes_par3_t2 ~~ c("res3a", "res3b")*selfes_par3_t2  # This allows residual variance on indicator X3 at T2

selfes_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
selfes_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
selfes_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

selfes_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
selfes_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
selfes_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

lcs_selfes_group_weak <- sem(mi_lcs_selfes_group_weak, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml', 
                           group = "rando", group.equal = "loadings")

# strong invariance
mi_lcs_selfes_group_strong <- '
selfes_t1 =~ 1*selfes_par1_t1 + c("lamb2", "lamb2")*selfes_par2_t1 + c("lamb3", "lamb3")*selfes_par3_t1 # This specifies the measurement model for selfes_t1 
selfes_t2 =~ 1*selfes_par1_t2 + c("lamb2", "lamb2")*selfes_par2_t2 + c("lamb3", "lamb3")*selfes_par3_t2 # This specifies the measurement model for selfes_t2 with the equality constrained factor loadings

selfes_t2 ~ 1*selfes_t1     # This parameter regresses selfes_t2 perfectly on selfes_t1
d_selfes_1 =~ 1*selfes_t2   # This defines the latent change score factor as measured perfectly by scores on selfes_t2
selfes_t2 ~ 0*1           # This line constrains the intercept of selfes_t2 to 0
selfes_t2 ~~ 0*selfes_t2    # This fixes the variance of selfes_t2 to 0

d_selfes_1 ~ c("d_int", "d_int")*1           # This estimates the intercept of the change score 
selfes_t1 ~ c("wb_int", "wb_int")*1            # This estimates the intercept of selfes_t1 
d_selfes_1 ~~ c("d_var_a", "d_var_b")*d_selfes_1   # This estimates the variance of the change scores 
selfes_t1 ~~ c("wb_var_a", "wb_var_b")*selfes_t1     # This estimates the variance of the selfes_t1 
d_selfes_1 ~~ c("fb_a", "fb_b")*selfes_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

selfes_par1_t1 ~~ c("cov1a", "cov1b")*selfes_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
selfes_par2_t1 ~~ c("cov2a", "cov2b")*selfes_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
selfes_par3_t1 ~~ c("cov3a", "cov3b")*selfes_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

selfes_par1_t1 ~~ c("res1a", "res1b")*selfes_par1_t1   # This allows residual variance on indicator X1 at T1 
selfes_par2_t1 ~~ c("res2a", "res2b")*selfes_par2_t1   # This allows residual variance on indicator X2 at T1
selfes_par3_t1 ~~ c("res3a", "res3b")*selfes_par3_t1   # This allows residual variance on indicator X3 at T1

selfes_par1_t2 ~~ c("res1a", "res1b")*selfes_par1_t2  # This allows residual variance on indicator X1 at T2 
selfes_par2_t2 ~~ c("res2a", "res2b")*selfes_par2_t2  # This allows residual variance on indicator X2 at T2 
selfes_par3_t2 ~~ c("res3a", "res3b")*selfes_par3_t2  # This allows residual variance on indicator X3 at T2

selfes_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
selfes_par2_t1 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T1
selfes_par3_t1 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T1

selfes_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
selfes_par2_t2 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T2
selfes_par3_t2 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T2
'

lcs_selfes_group_strong <- sem(mi_lcs_selfes_group_strong, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml', 
                             group = "rando", group.equal = c("intercepts", "loadings"))

Self-esteem: results

# model comparison tests for measurement invariance
lavTestLRT(lcs_selfes_group_config, lcs_selfes_group_weak, lcs_selfes_group_strong)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                        Df    AIC    BIC  Chisq Chisq diff Df diff Pr(>Chisq)
lcs_selfes_group_config 24 7216.5 7351.9 16.395                              
lcs_selfes_group_weak   26 7213.2 7339.6 17.124    0.76343       2     0.6827
lcs_selfes_group_strong 30 7208.1 7316.4 19.974    2.84132       4     0.5847
# show model with varying latent change parameters 
# -> key parameter is "d_selfes_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_selfes <- broom::tidy(lcs_selfes_group_weak, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_wb_st2 %>% filter(trait=="selfes" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_selfes_1 ~1 "))
kable(params_main_lcs_selfes, digits = 3) 
term label estimate beta std.all statistic p.value
d_selfes_1 ~1 d_int_a 0.240 0.273 0.523 7.667 0
d_selfes_1 ~1 d_int_b 0.287 0.326 0.570 8.640 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(lcs_selfes_group_strong, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_wb_st2 %>% filter(trait=="selfes" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_selfes_1 ~1 ")), digits = 3) 
term label estimate beta std.all statistic p.value
d_selfes_1 ~1 d_int 0.264 0.3 0.574 11.621 0
d_selfes_1 ~1 d_int 0.264 0.3 0.524 11.621 0

Slightly more positive change in self-esteem in the self-improvement group but no substantial differences according to the LRTs.

# whole model (weak invariance)
summary(lcs_selfes_group_weak, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 72 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        44
  Number of equality constraints                    16

  Number of observations per group:               Used       Total
    Self-Acceptance                                336         336
    Self-Improvement                               337         338
  Number of missing patterns per group:                           
    Self-Acceptance                                  2            
    Self-Improvement                                 2            

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                                17.124      16.149
  Degrees of freedom                                26          26
  P-value (Chi-square)                           0.905       0.933
  Scaling correction factor                                  1.060
    Yuan-Bentler correction (Mplus variant)                       
  Test statistic for each group:
    Self-Acceptance                             11.170      10.534
    Self-Improvement                             5.954       5.615

Model Test Baseline Model:

  Test statistic                              3063.748    2410.188
  Degrees of freedom                                30          30
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.271

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    1.000       1.000
  Tucker-Lewis Index (TLI)                       1.003       1.005
                                                                  
  Robust Comparative Fit Index (CFI)                         1.000
  Robust Tucker-Lewis Index (TLI)                            1.004

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -3578.624   -3578.624
  Scaling correction factor                                  0.727
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -3570.062   -3570.062
  Scaling correction factor                                  1.103
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                                7213.249    7213.249
  Bayesian (BIC)                              7339.578    7339.578
  Sample-size adjusted Bayesian (SABIC)       7250.675    7250.675

Root Mean Square Error of Approximation:

  RMSEA                                          0.000       0.000
  90 Percent confidence interval - lower         0.000       0.000
  90 Percent confidence interval - upper         0.018       0.010
  P-value H_0: RMSEA <= 0.050                    1.000       1.000
  P-value H_0: RMSEA >= 0.080                    0.000       0.000
                                                                  
  Robust RMSEA                                               0.000
  90 Percent confidence interval - lower                     0.000
  90 Percent confidence interval - upper                     0.014
  P-value H_0: Robust RMSEA <= 0.050                         0.999
  P-value H_0: Robust RMSEA >= 0.080                         0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.024       0.024

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian


Group 1 [Self-Acceptance]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t1 =~                                                          
    slf_1_1           1.000                               0.733    0.858
    slf_2_1 (lmb2)    1.112    0.035   32.055    0.000    0.815    0.797
    slf_3_1 (lmb3)    1.245    0.029   42.256    0.000    0.913    0.954
  selfes_t2 =~                                                          
    slf_1_2           1.000                               0.747    0.862
    slf_2_2 (lmb2)    1.112    0.035   32.055    0.000    0.831    0.802
    slf_3_2 (lmb3)    1.245    0.029   42.256    0.000    0.930    0.956
  d_selfes_1 =~                                                         
    slfs_t2           1.000                               0.615    0.615

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t2 ~                                                           
    selfes_t1         1.000                               0.982    0.982

Covariances:
                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t1 ~~                                                           
    d_slf_1 (fb_a)    -0.095    0.023   -4.114    0.000   -0.283   -0.283
 .selfes_par1_t1 ~~                                                      
   .slf_1_2 (cov1)     0.076    0.016    4.662    0.000    0.076    0.394
 .selfes_par2_t1 ~~                                                      
   .slf_2_2 (cov2)     0.176    0.031    5.584    0.000    0.176    0.459
 .selfes_par3_t1 ~~                                                      
   .slf_3_2 (cov3)    -0.035    0.017   -2.100    0.036   -0.035   -0.432

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .slfs_t2           0.000                               0.000    0.000
    d_slf_1 (d_n_)    0.240    0.031    7.667    0.000    0.523    0.523
    slfs_t1 (wb__)    3.531    0.046   76.740    0.000    4.815    4.815
   .slf_1_1           0.000                               0.000    0.000
   .slf_2_1  (m2a)   -1.200    0.133   -9.035    0.000   -1.200   -1.173
   .slf_3_1  (m3a)   -1.180    0.114  -10.337    0.000   -1.180   -1.233
   .slf_1_2           0.000                               0.000    0.000
   .slf_2_2  (m2a)   -1.200    0.133   -9.035    0.000   -1.200   -1.159
   .slf_3_2  (m3a)   -1.180    0.114  -10.337    0.000   -1.180   -1.212

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .slfs_t2           0.000                               0.000    0.000
    d_slf_1 (d_v_)    0.211    0.033    6.426    0.000    1.000    1.000
    slfs_t1 (wb__)    0.538    0.044   12.136    0.000    1.000    1.000
   .slf_1_1 (res1)    0.192    0.017   11.333    0.000    0.192    0.263
   .slf_2_1 (res2)    0.382    0.032   11.934    0.000    0.382    0.365
   .slf_3_1 (res3)    0.082    0.017    4.799    0.000    0.082    0.089
   .slf_1_2 (res1)    0.192    0.017   11.333    0.000    0.192    0.256
   .slf_2_2 (res2)    0.382    0.032   11.934    0.000    0.382    0.357
   .slf_3_2 (res3)    0.082    0.017    4.799    0.000    0.082    0.086


Group 2 [Self-Improvement]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t1 =~                                                          
    slf_1_1           1.000                               0.757    0.880
    slf_2_1 (lmb2)    1.112    0.035   32.055    0.000    0.841    0.807
    slf_3_1 (lmb3)    1.245    0.029   42.256    0.000    0.942    0.929
  selfes_t2 =~                                                          
    slf_1_2           1.000                               0.686    0.859
    slf_2_2 (lmb2)    1.112    0.035   32.055    0.000    0.763    0.778
    slf_3_2 (lmb3)    1.245    0.029   42.256    0.000    0.855    0.916
  d_selfes_1 =~                                                         
    slfs_t2           1.000                               0.734    0.734

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t2 ~                                                           
    selfes_t1         1.000                               1.103    1.103

Covariances:
                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t1 ~~                                                           
    d_slf_1 (fb_b)    -0.178    0.028   -6.327    0.000   -0.466   -0.466
 .selfes_par1_t1 ~~                                                      
   .slf_1_2 (cv1b)     0.065    0.016    4.023    0.000    0.065    0.388
 .selfes_par2_t1 ~~                                                      
   .slf_2_2 (cv2b)     0.137    0.027    5.051    0.000    0.137    0.359
 .selfes_par3_t1 ~~                                                      
   .slf_3_2 (cv3b)     0.034    0.024    1.433    0.152    0.034    0.246

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .slfs_t2           0.000                               0.000    0.000
    d_slf_1 (d_n_)    0.287    0.033    8.640    0.000    0.570    0.570
    slfs_t1 (wb__)    3.548    0.045   78.100    0.000    4.689    4.689
   .slf_1_1           0.000                               0.000    0.000
   .slf_2_1  (m2b)   -1.255    0.130   -9.655    0.000   -1.255   -1.203
   .slf_3_1  (m3b)   -1.185    0.114  -10.411    0.000   -1.185   -1.168
   .slf_1_2           0.000                               0.000    0.000
   .slf_2_2  (m2b)   -1.255    0.130   -9.655    0.000   -1.255   -1.280
   .slf_3_2  (m3b)   -1.185    0.114  -10.411    0.000   -1.185   -1.270

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .slfs_t2           0.000                               0.000    0.000
    d_slf_1 (d_v_)    0.254    0.036    6.949    0.000    1.000    1.000
    slfs_t1 (wb__)    0.573    0.044   12.915    0.000    1.000    1.000
   .slf_1_1 (rs1b)    0.167    0.016   10.278    0.000    0.167    0.226
   .slf_2_1 (rs2b)    0.380    0.029   13.294    0.000    0.380    0.350
   .slf_3_1 (rs3b)    0.140    0.025    5.653    0.000    0.140    0.136
   .slf_1_2 (rs1b)    0.167    0.016   10.278    0.000    0.167    0.262
   .slf_2_2 (rs2b)    0.380    0.029   13.294    0.000    0.380    0.395
   .slf_3_2 (rs3b)    0.140    0.025    5.653    0.000    0.140    0.161
6.8.1.4 Self-concept clarity

Self-concept clarity: fitting multi-group models

Show the code
# adapt latent change score model from above and add grouping factor in estimation (also add vectorized equality constraints to the model)

# configural invariance
mi_lcs_concept_group_config <- '
concept_t1 =~ 1*concept_par1_t1 + c("lamb2a", "lamb2b")*concept_par2_t1 + c("lamb3a", "lamb3b")*concept_par3_t1 # This specifies the measurement model for concept_t1 
concept_t2 =~ 1*concept_par1_t2 + c("lamb2a", "lamb2b")*concept_par2_t2 + c("lamb3a", "lamb3b")*concept_par3_t2 # This specifies the measurement model for concept_t2 with the equality constrained factor loadings

concept_t2 ~ 1*concept_t1     # This parameter regresses concept_t2 perfectly on concept_t1
d_concept_1 =~ 1*concept_t2   # This defines the latent change score factor as measured perfectly by scores on concept_t2
concept_t2 ~ 0*1           # This line constrains the intercept of concept_t2 to 0
concept_t2 ~~ 0*concept_t2    # This fixes the variance of concept_t2 to 0

d_concept_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
concept_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of concept_t1 
d_concept_1 ~~ c("d_var_a", "d_var_b")*d_concept_1   # This estimates the variance of the change scores 
concept_t1 ~~ c("wb_var_a", "wb_var_b")*concept_t1     # This estimates the variance of the concept_t1 
d_concept_1 ~~ c("fb_a", "fb_b")*concept_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

concept_par1_t1 ~~ c("cov1a", "cov1b")*concept_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
concept_par2_t1 ~~ c("cov2a", "cov2b")*concept_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
concept_par3_t1 ~~ c("cov3a", "cov3b")*concept_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

concept_par1_t1 ~~ c("res1a", "res1b")*concept_par1_t1   # This allows residual variance on indicator X1 at T1 
concept_par2_t1 ~~ c("res2a", "res2b")*concept_par2_t1   # This allows residual variance on indicator X2 at T1
concept_par3_t1 ~~ c("res3a", "res3b")*concept_par3_t1   # This allows residual variance on indicator X3 at T1

concept_par1_t2 ~~ c("res1a", "res1b")*concept_par1_t2  # This allows residual variance on indicator X1 at T2 
concept_par2_t2 ~~ c("res2a", "res2b")*concept_par2_t2  # This allows residual variance on indicator X2 at T2 
concept_par3_t2 ~~ c("res3a", "res3b")*concept_par3_t2  # This allows residual variance on indicator X3 at T2

concept_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
concept_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
concept_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

concept_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
concept_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
concept_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'
lcs_concept_group_config <- sem(mi_lcs_concept_group_config, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', 
                                fixed.x=FALSE, missing='fiml', group = "rando")

# weak invariance
mi_lcs_concept_group_weak <- '
concept_t1 =~ 1*concept_par1_t1 + c("lamb2", "lamb2")*concept_par2_t1 + c("lamb3", "lamb3")*concept_par3_t1 # This specifies the measurement model for concept_t1 
concept_t2 =~ 1*concept_par1_t2 + c("lamb2", "lamb2")*concept_par2_t2 + c("lamb3", "lamb3")*concept_par3_t2 # This specifies the measurement model for concept_t2 with the equality constrained factor loadings

concept_t2 ~ 1*concept_t1     # This parameter regresses concept_t2 perfectly on concept_t1
d_concept_1 =~ 1*concept_t2   # This defines the latent change score factor as measured perfectly by scores on concept_t2
concept_t2 ~ 0*1           # This line constrains the intercept of concept_t2 to 0
concept_t2 ~~ 0*concept_t2    # This fixes the variance of concept_t2 to 0

d_concept_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
concept_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of concept_t1 
d_concept_1 ~~ c("d_var_a", "d_var_b")*d_concept_1   # This estimates the variance of the change scores 
concept_t1 ~~ c("wb_var_a", "wb_var_b")*concept_t1     # This estimates the variance of the concept_t1 
d_concept_1 ~~ c("fb_a", "fb_b")*concept_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

concept_par1_t1 ~~ c("cov1a", "cov1b")*concept_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
concept_par2_t1 ~~ c("cov2a", "cov2b")*concept_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
concept_par3_t1 ~~ c("cov3a", "cov3b")*concept_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

concept_par1_t1 ~~ c("res1a", "res1b")*concept_par1_t1   # This allows residual variance on indicator X1 at T1 
concept_par2_t1 ~~ c("res2a", "res2b")*concept_par2_t1   # This allows residual variance on indicator X2 at T1
concept_par3_t1 ~~ c("res3a", "res3b")*concept_par3_t1   # This allows residual variance on indicator X3 at T1

concept_par1_t2 ~~ c("res1a", "res1b")*concept_par1_t2  # This allows residual variance on indicator X1 at T2 
concept_par2_t2 ~~ c("res2a", "res2b")*concept_par2_t2  # This allows residual variance on indicator X2 at T2 
concept_par3_t2 ~~ c("res3a", "res3b")*concept_par3_t2  # This allows residual variance on indicator X3 at T2

concept_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
concept_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
concept_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

concept_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
concept_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
concept_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

lcs_concept_group_weak <- sem(mi_lcs_concept_group_weak, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml', 
                           group = "rando", group.equal = "loadings")

# strong invariance
mi_lcs_concept_group_strong <- '
concept_t1 =~ 1*concept_par1_t1 + c("lamb2", "lamb2")*concept_par2_t1 + c("lamb3", "lamb3")*concept_par3_t1 # This specifies the measurement model for concept_t1 
concept_t2 =~ 1*concept_par1_t2 + c("lamb2", "lamb2")*concept_par2_t2 + c("lamb3", "lamb3")*concept_par3_t2 # This specifies the measurement model for concept_t2 with the equality constrained factor loadings

concept_t2 ~ 1*concept_t1     # This parameter regresses concept_t2 perfectly on concept_t1
d_concept_1 =~ 1*concept_t2   # This defines the latent change score factor as measured perfectly by scores on concept_t2
concept_t2 ~ 0*1           # This line constrains the intercept of concept_t2 to 0
concept_t2 ~~ 0*concept_t2    # This fixes the variance of concept_t2 to 0

d_concept_1 ~ c("d_int", "d_int")*1           # This estimates the intercept of the change score 
concept_t1 ~ c("wb_int", "wb_int")*1            # This estimates the intercept of concept_t1 
d_concept_1 ~~ c("d_var_a", "d_var_b")*d_concept_1   # This estimates the variance of the change scores 
concept_t1 ~~ c("wb_var_a", "wb_var_b")*concept_t1     # This estimates the variance of the concept_t1 
d_concept_1 ~~ c("fb_a", "fb_b")*concept_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

concept_par1_t1 ~~ c("cov1a", "cov1b")*concept_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
concept_par2_t1 ~~ c("cov2a", "cov2b")*concept_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
concept_par3_t1 ~~ c("cov3a", "cov3b")*concept_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

concept_par1_t1 ~~ c("res1a", "res1b")*concept_par1_t1   # This allows residual variance on indicator X1 at T1 
concept_par2_t1 ~~ c("res2a", "res2b")*concept_par2_t1   # This allows residual variance on indicator X2 at T1
concept_par3_t1 ~~ c("res3a", "res3b")*concept_par3_t1   # This allows residual variance on indicator X3 at T1

concept_par1_t2 ~~ c("res1a", "res1b")*concept_par1_t2  # This allows residual variance on indicator X1 at T2 
concept_par2_t2 ~~ c("res2a", "res2b")*concept_par2_t2  # This allows residual variance on indicator X2 at T2 
concept_par3_t2 ~~ c("res3a", "res3b")*concept_par3_t2  # This allows residual variance on indicator X3 at T2

concept_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
concept_par2_t1 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T1
concept_par3_t1 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T1

concept_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
concept_par2_t2 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T2
concept_par3_t2 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T2
'

lcs_concept_group_strong <- sem(mi_lcs_concept_group_strong, data=df_sbsa2_wide_wb %>% filter(rando!="Waitlist-Control"), estimator='mlr', fixed.x=FALSE, missing='fiml', 
                             group = "rando", group.equal = c("intercepts", "loadings"))

Self-concept clarity: results

# model comparison tests for measurement invariance
lavTestLRT(lcs_concept_group_config, lcs_concept_group_weak, lcs_concept_group_strong)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                         Df    AIC    BIC  Chisq Chisq diff Df diff Pr(>Chisq)
lcs_concept_group_config 24 7424.3 7559.7 31.207                              
lcs_concept_group_weak   26 7420.6 7546.9 31.474    0.26259       2     0.8770
lcs_concept_group_strong 30 7413.2 7521.5 32.099    0.62600       4     0.9601
# show model with varying latent change parameters 
# -> key parameter is "d_concept_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_concept <- broom::tidy(lcs_concept_group_weak, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_wb_st2 %>% filter(trait=="concept" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_concept_1 ~1 "))
kable(params_main_lcs_concept, digits = 3) 
term label estimate beta std.all statistic p.value
d_concept_1 ~1 d_int_a 0.168 0.188 0.336 5.123 0
d_concept_1 ~1 d_int_b 0.185 0.208 0.374 5.700 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(lcs_concept_group_strong, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_wb_st2 %>% filter(trait=="concept" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_concept_1 ~1 ")), digits = 3) 
term label estimate beta std.all statistic p.value
d_concept_1 ~1 d_int 0.177 0.198 0.353 7.62 0
d_concept_1 ~1 d_int 0.177 0.198 0.358 7.62 0

Slightly more positive change in self-concept clarity in the self-improvement group but no substantial differences according to the LRTs.

# whole model (weak invariance)
summary(lcs_concept_group_weak, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 62 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        44
  Number of equality constraints                    16

  Number of observations per group:               Used       Total
    Self-Acceptance                                336         336
    Self-Improvement                               337         338
  Number of missing patterns per group:                           
    Self-Acceptance                                  2            
    Self-Improvement                                 2            

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                                31.474      28.712
  Degrees of freedom                                26          26
  P-value (Chi-square)                           0.211       0.324
  Scaling correction factor                                  1.096
    Yuan-Bentler correction (Mplus variant)                       
  Test statistic for each group:
    Self-Acceptance                             17.734      16.178
    Self-Improvement                            13.740      12.534

Model Test Baseline Model:

  Test statistic                              2887.162    2162.733
  Degrees of freedom                                30          30
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.335

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.998       0.999
  Tucker-Lewis Index (TLI)                       0.998       0.999
                                                                  
  Robust Comparative Fit Index (CFI)                         0.999
  Robust Tucker-Lewis Index (TLI)                            0.999

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -3682.288   -3682.288
  Scaling correction factor                                  0.726
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -3666.551   -3666.551
  Scaling correction factor                                  1.119
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                                7420.576    7420.576
  Bayesian (BIC)                              7546.905    7546.905
  Sample-size adjusted Bayesian (SABIC)       7458.003    7458.003

Root Mean Square Error of Approximation:

  RMSEA                                          0.025       0.018
  90 Percent confidence interval - lower         0.000       0.000
  90 Percent confidence interval - upper         0.052       0.047
  P-value H_0: RMSEA <= 0.050                    0.932       0.971
  P-value H_0: RMSEA >= 0.080                    0.000       0.000
                                                                  
  Robust RMSEA                                               0.020
  90 Percent confidence interval - lower                     0.000
  90 Percent confidence interval - upper                     0.053
  P-value H_0: Robust RMSEA <= 0.050                         0.925
  P-value H_0: Robust RMSEA >= 0.080                         0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.022       0.022

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian


Group 1 [Self-Acceptance]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t1 =~                                                         
    cnc_1_1           1.000                               0.650    0.794
    cnc_2_1 (lmb2)    1.283    0.041   31.361    0.000    0.834    0.869
    cnc_3_1 (lmb3)    1.414    0.042   33.772    0.000    0.919    0.924
  concept_t2 =~                                                         
    cnc_1_2           1.000                               0.663    0.800
    cnc_2_2 (lmb2)    1.283    0.041   31.361    0.000    0.851    0.873
    cnc_3_2 (lmb3)    1.414    0.042   33.772    0.000    0.938    0.927
  d_concept_1 =~                                                        
    cncpt_2           1.000                               0.756    0.756

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t2 ~                                                          
    concept_t1        1.000                               0.980    0.980

Covariances:
                     Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t1 ~~                                                           
    d_cnc_1 (fb_a)     -0.117    0.025   -4.763    0.000   -0.359   -0.359
 .concept_par1_t1 ~~                                                      
   .cnc_1_2 (cov1)      0.070    0.020    3.400    0.001    0.070    0.281
 .concept_par2_t1 ~~                                                      
   .cnc_2_2 (cov2)      0.086    0.021    4.072    0.000    0.086    0.380
 .concept_par3_t1 ~~                                                      
   .cnc_3_2 (cov3)      0.028    0.022    1.296    0.195    0.028    0.194

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .cncpt_2           0.000                               0.000    0.000
    d_cnc_1 (d_n_)    0.168    0.033    5.123    0.000    0.336    0.336
    cncpt_1 (wb__)    3.050    0.042   72.638    0.000    4.692    4.692
   .cnc_1_1           0.000                               0.000    0.000
   .cnc_2_1  (m2a)   -0.931    0.138   -6.754    0.000   -0.931   -0.970
   .cnc_3_1  (m3a)   -1.377    0.138   -9.984    0.000   -1.377   -1.384
   .cnc_1_2           0.000                               0.000    0.000
   .cnc_2_2  (m2a)   -0.931    0.138   -6.754    0.000   -0.931   -0.955
   .cnc_3_2  (m3a)   -1.377    0.138   -9.984    0.000   -1.377   -1.361

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .cncpt_2           0.000                               0.000    0.000
    d_cnc_1 (d_v_)    0.252    0.034    7.500    0.000    1.000    1.000
    cncpt_1 (wb__)    0.423    0.036   11.577    0.000    1.000    1.000
   .cnc_1_1 (res1)    0.248    0.020   12.590    0.000    0.248    0.370
   .cnc_2_1 (res2)    0.227    0.020   11.576    0.000    0.227    0.246
   .cnc_3_1 (res3)    0.144    0.023    6.215    0.000    0.144    0.146
   .cnc_1_2 (res1)    0.248    0.020   12.590    0.000    0.248    0.361
   .cnc_2_2 (res2)    0.227    0.020   11.576    0.000    0.227    0.238
   .cnc_3_2 (res3)    0.144    0.023    6.215    0.000    0.144    0.141


Group 2 [Self-Improvement]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t1 =~                                                         
    cnc_1_1           1.000                               0.700    0.802
    cnc_2_1 (lmb2)    1.283    0.041   31.361    0.000    0.899    0.895
    cnc_3_1 (lmb3)    1.414    0.042   33.772    0.000    0.990    0.919
  concept_t2 =~                                                         
    cnc_1_2           1.000                               0.661    0.785
    cnc_2_2 (lmb2)    1.283    0.041   31.361    0.000    0.848    0.885
    cnc_3_2 (lmb3)    1.414    0.042   33.772    0.000    0.934    0.910
  d_concept_1 =~                                                        
    cncpt_2           1.000                               0.750    0.750

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t2 ~                                                          
    concept_t1        1.000                               1.060    1.060

Covariances:
                     Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t1 ~~                                                           
    d_cnc_1 (fb_b)     -0.150    0.024   -6.142    0.000   -0.432   -0.432
 .concept_par1_t1 ~~                                                      
   .cnc_1_2 (cv1b)      0.072    0.020    3.556    0.000    0.072    0.263
 .concept_par2_t1 ~~                                                      
   .cnc_2_2 (cv2b)      0.063    0.020    3.196    0.001    0.063    0.315
 .concept_par3_t1 ~~                                                      
   .cnc_3_2 (cv3b)      0.037    0.021    1.798    0.072    0.037    0.207

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .cncpt_2           0.000                               0.000    0.000
    d_cnc_1 (d_n_)    0.185    0.033    5.700    0.000    0.374    0.374
    cncpt_1 (wb__)    3.038    0.045   67.515    0.000    4.337    4.337
   .cnc_1_1           0.000                               0.000    0.000
   .cnc_2_1  (m2b)   -0.899    0.134   -6.729    0.000   -0.899   -0.896
   .cnc_3_1  (m3b)   -1.363    0.135  -10.067    0.000   -1.363   -1.265
   .cnc_1_2           0.000                               0.000    0.000
   .cnc_2_2  (m2b)   -0.899    0.134   -6.729    0.000   -0.899   -0.939
   .cnc_3_2  (m3b)   -1.363    0.135  -10.067    0.000   -1.363   -1.328

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .cncpt_2           0.000                               0.000    0.000
    d_cnc_1 (d_v_)    0.245    0.037    6.571    0.000    1.000    1.000
    cncpt_1 (wb__)    0.490    0.039   12.493    0.000    1.000    1.000
   .cnc_1_1 (rs1b)    0.273    0.020   13.575    0.000    0.273    0.357
   .cnc_2_1 (rs2b)    0.199    0.021    9.657    0.000    0.199    0.198
   .cnc_3_1 (rs3b)    0.181    0.027    6.668    0.000    0.181    0.156
   .cnc_1_2 (rs1b)    0.273    0.020   13.575    0.000    0.273    0.385
   .cnc_2_2 (rs2b)    0.199    0.021    9.657    0.000    0.199    0.217
   .cnc_3_2 (rs3b)    0.181    0.027    6.668    0.000    0.181    0.172
6.8.1.5 Summary of latent main effects
params_main_wb_summary <- bind_rows(
  params_main_lcs_swls %>% mutate(trait = "Life satisfaction") %>% select(trait, group = label, estimate, beta, p.value),
  params_main_lcs_meaning %>% mutate(trait = "Meaning in life") %>% select(trait, group = label, estimate, beta, p.value),
  params_main_lcs_selfes %>% mutate(trait = "Self-esteem") %>% select(trait, group = label, estimate, beta, p.value),
  params_main_lcs_concept %>% mutate(trait = "Self-concept clarity") %>% select(trait, group = label, estimate, beta, p.value)) %>% mutate(group = ifelse(group=="d_int_a", "Self-Acceptance", "Self-Improvement"))

kable(params_main_wb_summary, digits = 3)
trait group estimate beta p.value
Life satisfaction Self-Acceptance 0.246 0.248 0
Life satisfaction Self-Improvement 0.296 0.298 0
Meaning in life Self-Acceptance 0.196 0.169 0
Meaning in life Self-Improvement 0.230 0.198 0
Self-esteem Self-Acceptance 0.240 0.273 0
Self-esteem Self-Improvement 0.287 0.326 0
Self-concept clarity Self-Acceptance 0.168 0.188 0
Self-concept clarity Self-Improvement 0.185 0.208 0

6.8.2 Latent well-being change: intervention vs. control

After seeing that the two intervention groups do not differ substantially, we want to test the control group vs. the two intervention groups (all from T1 to T2).

# add new group variable
df_sbsa2_wide_wb <- df_sbsa2_wide_wb %>% 
  mutate(group_cg = ifelse(rando=="Waitlist-Control", "Control", "Intervention"))

df_sbsa2_wide_wb %>% group_by(group_cg) %>% tally()
# A tibble: 2 × 2
  group_cg         n
  <chr>        <int>
1 Control        175
2 Intervention   674
6.8.2.1 Life satisfaction

Life satisfaction: fitting multi-group models

Show the code
# adapt latent change score model from above and add grouping factor in estimation (also add vectorized equality constraints to the model)

# configural invariance
mi_lcs_swls_group_cg_config <- '
swls_t1 =~ 1*sw06_01_t1 + c("lamb2a", "lamb2b")*sw06_02_t1 + c("lamb3a", "lamb3b")*sw06_03_t1 + c("lamb4a", "lamb4b")*sw06_04_t1 # This specifies the measurement model for swls_t1 
swls_t2 =~ 1*sw06_01_t2 + c("lamb2a", "lamb2b")*sw06_02_t2 + c("lamb3a", "lamb3b")*sw06_03_t2 + c("lamb4a", "lamb4b")*sw06_04_t2 # This specifies the measurement model for swls_t2 with the equality constrained factor loadings

swls_t2 ~ 1*swls_t1     # This parameter regresses swls_t2 perfectly on swls_t1
d_swls_1 =~ 1*swls_t2   # This defines the latent change score factor as measured perfectly by scores on swls_t2
swls_t2 ~ 0*1           # This line constrains the intercept of swls_t2 to 0
swls_t2 ~~ 0*swls_t2    # This fixes the variance of swls_t2 to 0

d_swls_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
swls_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of swls_t1 
d_swls_1 ~~ c("d_var_a", "d_var_b")*d_swls_1   # This estimates the variance of the change scores 
swls_t1 ~~ c("wb_var_a", "wb_var_b")*swls_t1     # This estimates the variance of the swls_t1 
d_swls_1 ~~ c("fb_a", "fb_b")*swls_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

sw06_01_t1 ~~ c("cov1a", "cov1b")*sw06_01_t2   # This allows residual covariance on indicator X1 across T1 and T2
sw06_02_t1 ~~ c("cov2a", "cov2b")*sw06_02_t2   # This allows residual covariance on indicator X2 across T1 and T2
sw06_03_t1 ~~ c("cov3a", "cov3b")*sw06_03_t2   # This allows residual covariance on indicator X3 across T1 and T2
sw06_04_t1 ~~ c("cov4a", "cov4b")*sw06_04_t2   # This allows residual covariance on indicator X4 across T1 and T2

sw06_01_t1 ~~ c("res1a", "res1b")*sw06_01_t1   # This allows residual variance on indicator X1 at T1 
sw06_02_t1 ~~ c("res2a", "res2b")*sw06_02_t1   # This allows residual variance on indicator X2 at T1
sw06_03_t1 ~~ c("res3a", "res3b")*sw06_03_t1   # This allows residual variance on indicator X3 at T1
sw06_04_t1 ~~ c("res4a", "res4b")*sw06_04_t1   # This allows residual variance on indicator X4 at T1

sw06_01_t2 ~~ c("res1a", "res1b")*sw06_01_t2  # This allows residual variance on indicator X1 at T2 
sw06_02_t2 ~~ c("res2a", "res2b")*sw06_02_t2  # This allows residual variance on indicator X2 at T2 
sw06_03_t2 ~~ c("res3a", "res3b")*sw06_03_t2  # This allows residual variance on indicator X3 at T2
sw06_04_t2 ~~ c("res4a", "res4b")*sw06_04_t2  # This allows residual variance on indicator X4 at T2

sw06_01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
sw06_02_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
sw06_03_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1
sw06_04_t1 ~ c("m4a", "m4b")*1     # This estimates the intercept of X4 at T1

sw06_01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
sw06_02_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
sw06_03_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
sw06_04_t2 ~ c("m4a", "m4b")*1     # This estimates the intercept of X4 at T2
'
lcs_swls_group_cg_config <- sem(mi_lcs_swls_group_cg_config, data=df_sbsa2_wide_wb, estimator='mlr', 
                             fixed.x=FALSE, missing='fiml', group = "group_cg")

# weak invariance
mi_lcs_swls_group_cg_weak <- '
swls_t1 =~ 1*sw06_01_t1 + c("lamb2", "lamb2")*sw06_02_t1 + c("lamb3", "lamb3")*sw06_03_t1 + c("lamb4", "lamb4")*sw06_04_t1 # This specifies the measurement model for swls_t1 
swls_t2 =~ 1*sw06_01_t2 + c("lamb2", "lamb2")*sw06_02_t2 + c("lamb3", "lamb3")*sw06_03_t2 + c("lamb4", "lamb4")*sw06_04_t2 # This specifies the measurement model for swls_t2 with the equality constrained factor loadings

swls_t2 ~ 1*swls_t1     # This parameter regresses swls_t2 perfectly on swls_t1
d_swls_1 =~ 1*swls_t2   # This defines the latent change score factor as measured perfectly by scores on swls_t2
swls_t2 ~ 0*1           # This line constrains the intercept of swls_t2 to 0
swls_t2 ~~ 0*swls_t2    # This fixes the variance of swls_t2 to 0

d_swls_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
swls_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of swls_t1 
d_swls_1 ~~ c("d_var_a", "d_var_b")*d_swls_1   # This estimates the variance of the change scores 
swls_t1 ~~ c("wb_var_a", "wb_var_b")*swls_t1     # This estimates the variance of the swls_t1 
d_swls_1 ~~ c("fb_a", "fb_b")*swls_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

sw06_01_t1 ~~ c("cov1a", "cov1b")*sw06_01_t2   # This allows residual covariance on indicator X1 across T1 and T2
sw06_02_t1 ~~ c("cov2a", "cov2b")*sw06_02_t2   # This allows residual covariance on indicator X2 across T1 and T2
sw06_03_t1 ~~ c("cov3a", "cov3b")*sw06_03_t2   # This allows residual covariance on indicator X3 across T1 and T2
sw06_04_t1 ~~ c("cov4a", "cov4b")*sw06_04_t2   # This allows residual covariance on indicator X4 across T1 and T2

sw06_01_t1 ~~ c("res1a", "res1b")*sw06_01_t1   # This allows residual variance on indicator X1 at T1 
sw06_02_t1 ~~ c("res2a", "res2b")*sw06_02_t1   # This allows residual variance on indicator X2 at T1
sw06_03_t1 ~~ c("res3a", "res3b")*sw06_03_t1   # This allows residual variance on indicator X3 at T1
sw06_04_t1 ~~ c("res4a", "res4b")*sw06_04_t1   # This allows residual variance on indicator X4 at T1

sw06_01_t2 ~~ c("res1a", "res1b")*sw06_01_t2  # This allows residual variance on indicator X1 at T2 
sw06_02_t2 ~~ c("res2a", "res2b")*sw06_02_t2  # This allows residual variance on indicator X2 at T2 
sw06_03_t2 ~~ c("res3a", "res3b")*sw06_03_t2  # This allows residual variance on indicator X3 at T2
sw06_04_t2 ~~ c("res4a", "res4b")*sw06_04_t2  # This allows residual variance on indicator X4 at T2

sw06_01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
sw06_02_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
sw06_03_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1
sw06_04_t1 ~ c("m4a", "m4b")*1     # This estimates the intercept of X4 at T1

sw06_01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
sw06_02_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
sw06_03_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
sw06_04_t2 ~ c("m4a", "m4b")*1     # This estimates the intercept of X4 at T2
'

lcs_swls_group_cg_weak <- sem(mi_lcs_swls_group_cg_weak, data=df_sbsa2_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml', 
                           group = "group_cg", group.equal = "loadings")

# strong invariance
mi_lcs_swls_group_cg_strong <- '
swls_t1 =~ 1*sw06_01_t1 + c("lamb2", "lamb2")*sw06_02_t1 + c("lamb3", "lamb3")*sw06_03_t1 + c("lamb4", "lamb4")*sw06_04_t1 # This specifies the measurement model for swls_t1 
swls_t2 =~ 1*sw06_01_t2 + c("lamb2", "lamb2")*sw06_02_t2 + c("lamb3", "lamb3")*sw06_03_t2 + c("lamb4", "lamb4")*sw06_04_t2 # This specifies the measurement model for swls_t2 with the equality constrained factor loadings

swls_t2 ~ 1*swls_t1     # This parameter regresses swls_t2 perfectly on swls_t1
d_swls_1 =~ 1*swls_t2   # This defines the latent change score factor as measured perfectly by scores on swls_t2
swls_t2 ~ 0*1           # This line constrains the intercept of swls_t2 to 0
swls_t2 ~~ 0*swls_t2    # This fixes the variance of swls_t2 to 0

d_swls_1 ~ c("d_int", "d_int")*1           # This estimates the intercept of the change score 
swls_t1 ~ c("wb_int", "wb_int")*1            # This estimates the intercept of swls_t1 
d_swls_1 ~~ c("d_var_a", "d_var_b")*d_swls_1   # This estimates the variance of the change scores 
swls_t1 ~~ c("wb_var_a", "wb_var_b")*swls_t1     # This estimates the variance of the swls_t1 
d_swls_1 ~~ c("fb_a", "fb_b")*swls_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

sw06_01_t1 ~~ c("cov1a", "cov1b")*sw06_01_t2   # This allows residual covariance on indicator X1 across T1 and T2
sw06_02_t1 ~~ c("cov2a", "cov2b")*sw06_02_t2   # This allows residual covariance on indicator X2 across T1 and T2
sw06_03_t1 ~~ c("cov3a", "cov3b")*sw06_03_t2   # This allows residual covariance on indicator X3 across T1 and T2
sw06_04_t1 ~~ c("cov4a", "cov4b")*sw06_04_t2   # This allows residual covariance on indicator X4 across T1 and T2

sw06_01_t1 ~~ c("res1a", "res1b")*sw06_01_t1   # This allows residual variance on indicator X1 at T1 
sw06_02_t1 ~~ c("res2a", "res2b")*sw06_02_t1   # This allows residual variance on indicator X2 at T1
sw06_03_t1 ~~ c("res3a", "res3b")*sw06_03_t1   # This allows residual variance on indicator X3 at T1
sw06_04_t1 ~~ c("res4a", "res4b")*sw06_04_t1   # This allows residual variance on indicator X4 at T1

sw06_01_t2 ~~ c("res1a", "res1b")*sw06_01_t2  # This allows residual variance on indicator X1 at T2 
sw06_02_t2 ~~ c("res2a", "res2b")*sw06_02_t2  # This allows residual variance on indicator X2 at T2 
sw06_03_t2 ~~ c("res3a", "res3b")*sw06_03_t2  # This allows residual variance on indicator X3 at T2
sw06_04_t2 ~~ c("res4a", "res4b")*sw06_04_t2  # This allows residual variance on indicator X4 at T2

sw06_01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
sw06_02_t1 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T1
sw06_03_t1 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T1
sw06_04_t1 ~ c("m4", "m4")*1     # This estimates the intercept of X4 at T1

sw06_01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
sw06_02_t2 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T2
sw06_03_t2 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T2
sw06_04_t2 ~ c("m4", "m4")*1     # This estimates the intercept of X4 at T2
'

lcs_swls_group_cg_strong <- sem(mi_lcs_swls_group_cg_strong, data=df_sbsa2_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml', 
                             group = "group_cg", group.equal = c("intercepts", "loadings"))

Life satisfaction: results

# model comparison tests for measurement invariance
lavTestLRT(lcs_swls_group_cg_config, lcs_swls_group_cg_weak, lcs_swls_group_cg_strong)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                         Df   AIC   BIC  Chisq Chisq diff Df diff Pr(>Chisq)  
lcs_swls_group_cg_config 50 16306 16486 143.14                                
lcs_swls_group_cg_weak   53 16303 16469 146.48     4.1252       3    0.24826  
lcs_swls_group_cg_strong 58 16303 16445 156.11     9.3589       5    0.09558 .
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> key parameter is "d_swls_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Control group, b = Intervention groups)
params_main_lcs_swls_cg <- broom::tidy(lcs_swls_group_cg_weak, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_wb_st2 %>% filter(trait=="swls" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_swls_1 ~1 "))
kable(params_main_lcs_swls_cg, digits = 3) 
term label estimate beta std.all statistic p.value
d_swls_1 ~1 d_int_a 0.243 0.245 0.463 4.294 0
d_swls_1 ~1 d_int_b 0.273 0.275 0.413 8.312 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(lcs_swls_group_cg_strong, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_wb_st2 %>% filter(trait=="swls" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_swls_1 ~1 ")), digits = 3) 
term label estimate beta std.all statistic p.value
d_swls_1 ~1 d_int 0.265 0.267 0.504 9.246 0
d_swls_1 ~1 d_int 0.265 0.267 0.401 9.246 0

Slightly more positive change in life satisfaction in the intervention groups compared to the control group but no substantial differences according to the LRTs.

# whole model (weak invariance)
summary(lcs_swls_group_cg_weak, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 60 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        58
  Number of equality constraints                    23

  Number of observations per group:               Used       Total
    Control                                        175         175
    Intervention                                   673         674
  Number of missing patterns per group:                           
    Control                                          4            
    Intervention                                     2            

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                               146.477     130.105
  Degrees of freedom                                53          53
  P-value (Chi-square)                           0.000       0.000
  Scaling correction factor                                  1.126
    Yuan-Bentler correction (Mplus variant)                       
  Test statistic for each group:
    Control                                     49.598      44.054
    Intervention                                96.879      86.050

Model Test Baseline Model:

  Test statistic                              4192.385    3012.004
  Degrees of freedom                                56          56
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.392

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.977       0.974
  Tucker-Lewis Index (TLI)                       0.976       0.972
                                                                  
  Robust Comparative Fit Index (CFI)                         0.979
  Robust Tucker-Lewis Index (TLI)                            0.978

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -8116.716   -8116.716
  Scaling correction factor                                  0.715
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -8043.478   -8043.478
  Scaling correction factor                                  1.149
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                               16303.433   16303.433
  Bayesian (BIC)                             16469.434   16469.434
  Sample-size adjusted Bayesian (SABIC)      16358.284   16358.284

Root Mean Square Error of Approximation:

  RMSEA                                          0.064       0.059
  90 Percent confidence interval - lower         0.052       0.047
  90 Percent confidence interval - upper         0.077       0.071
  P-value H_0: RMSEA <= 0.050                    0.027       0.114
  P-value H_0: RMSEA >= 0.080                    0.020       0.001
                                                                  
  Robust RMSEA                                               0.066
  90 Percent confidence interval - lower                     0.051
  90 Percent confidence interval - upper                     0.080
  P-value H_0: Robust RMSEA <= 0.050                         0.038
  P-value H_0: Robust RMSEA >= 0.080                         0.050

Standardized Root Mean Square Residual:

  SRMR                                           0.036       0.036

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian


Group 1 [Control]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t1 =~                                                            
    s06_01_           1.000                               1.074    0.861
    s06_02_ (lmb2)    0.896    0.024   36.841    0.000    0.961    0.800
    s06_03_ (lmb3)    1.025    0.026   39.798    0.000    1.101    0.892
    s06_04_ (lmb4)    0.883    0.027   32.256    0.000    0.947    0.751
  swls_t2 =~                                                            
    s06_01_           1.000                               1.098    0.866
    s06_02_ (lmb2)    0.896    0.024   36.841    0.000    0.983    0.807
    s06_03_ (lmb3)    1.025    0.026   39.798    0.000    1.125    0.896
    s06_04_ (lmb4)    0.883    0.027   32.256    0.000    0.969    0.758
  d_swls_1 =~                                                           
    swls_t2           1.000                               0.479    0.479

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t2 ~                                                             
    swls_t1           1.000                               0.978    0.978

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t1 ~~                                                            
    d_swl_1 (fb_a)   -0.112    0.067   -1.678    0.093   -0.199   -0.199
 .sw06_01_t1 ~~                                                         
   .s06_01_ (cov1)    0.034    0.058    0.584    0.559    0.034    0.085
 .sw06_02_t1 ~~                                                         
   .s06_02_ (cov2)    0.146    0.051    2.891    0.004    0.146    0.282
 .sw06_03_t1 ~~                                                         
   .s06_03_ (cov3)    0.067    0.053    1.271    0.204    0.067    0.216
 .sw06_04_t1 ~~                                                         
   .s06_04_ (cov4)    0.309    0.091    3.387    0.001    0.309    0.446

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .swls_t2           0.000                               0.000    0.000
    d_swl_1 (d_n_)    0.243    0.057    4.294    0.000    0.463    0.463
    swls_t1 (wb__)    2.637    0.091   28.838    0.000    2.456    2.456
   .s06_01_           0.000                               0.000    0.000
   .s06_02_  (m2a)    0.404    0.083    4.854    0.000    0.404    0.336
   .s06_03_  (m3a)    0.129    0.085    1.525    0.127    0.129    0.105
   .s06_04_  (m4a)    0.659    0.099    6.661    0.000    0.659    0.522
   .s06_01_           0.000                               0.000    0.000
   .s06_02_  (m2a)    0.404    0.083    4.854    0.000    0.404    0.331
   .s06_03_  (m3a)    0.129    0.085    1.525    0.127    0.129    0.103
   .s06_04_  (m4a)    0.659    0.099    6.661    0.000    0.659    0.516

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .swls_t2           0.000                               0.000    0.000
    d_swl_1 (d_v_)    0.276    0.079    3.506    0.000    1.000    1.000
    swls_t1 (wb__)    1.153    0.106   10.911    0.000    1.000    1.000
   .s06_01_ (res1)    0.402    0.059    6.850    0.000    0.402    0.259
   .s06_02_ (res2)    0.518    0.056    9.338    0.000    0.518    0.359
   .s06_03_ (res3)    0.310    0.050    6.150    0.000    0.310    0.204
   .s06_04_ (res4)    0.693    0.089    7.757    0.000    0.693    0.436
   .s06_01_ (res1)    0.402    0.059    6.850    0.000    0.402    0.250
   .s06_02_ (res2)    0.518    0.056    9.338    0.000    0.518    0.349
   .s06_03_ (res3)    0.310    0.050    6.150    0.000    0.310    0.197
   .s06_04_ (res4)    0.693    0.089    7.757    0.000    0.693    0.425


Group 2 [Intervention]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t1 =~                                                            
    s06_01_           1.000                               0.995    0.830
    s06_02_ (lmb2)    0.896    0.024   36.841    0.000    0.891    0.764
    s06_03_ (lmb3)    1.025    0.026   39.798    0.000    1.020    0.852
    s06_04_ (lmb4)    0.883    0.027   32.256    0.000    0.878    0.704
  swls_t2 =~                                                            
    s06_01_           1.000                               1.011    0.834
    s06_02_ (lmb2)    0.896    0.024   36.841    0.000    0.905    0.769
    s06_03_ (lmb3)    1.025    0.026   39.798    0.000    1.036    0.856
    s06_04_ (lmb4)    0.883    0.027   32.256    0.000    0.892    0.710
  d_swls_1 =~                                                           
    swls_t2           1.000                               0.653    0.653

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t2 ~                                                             
    swls_t1           1.000                               0.984    0.984

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t1 ~~                                                            
    d_swl_1 (fb_b)   -0.202    0.037   -5.504    0.000   -0.307   -0.307
 .sw06_01_t1 ~~                                                         
   .s06_01_ (cv1b)    0.092    0.032    2.901    0.004    0.092    0.207
 .sw06_02_t1 ~~                                                         
   .s06_02_ (cv2b)    0.252    0.036    7.048    0.000    0.252    0.445
 .sw06_03_t1 ~~                                                         
   .s06_03_ (cv3b)    0.053    0.030    1.794    0.073    0.053    0.136
 .sw06_04_t1 ~~                                                         
   .s06_04_ (cv4b)    0.308    0.047    6.625    0.000    0.308    0.393

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .swls_t2           0.000                               0.000    0.000
    d_swl_1 (d_n_)    0.273    0.033    8.312    0.000    0.413    0.413
    swls_t1 (wb__)    2.685    0.044   60.343    0.000    2.699    2.699
   .s06_01_           0.000                               0.000    0.000
   .s06_02_  (m2b)    0.487    0.079    6.195    0.000    0.487    0.418
   .s06_03_  (m3b)    0.103    0.080    1.280    0.201    0.103    0.086
   .s06_04_  (m4b)    0.499    0.087    5.735    0.000    0.499    0.401
   .s06_01_           0.000                               0.000    0.000
   .s06_02_  (m2b)    0.487    0.079    6.195    0.000    0.487    0.414
   .s06_03_  (m3b)    0.103    0.080    1.280    0.201    0.103    0.085
   .s06_04_  (m4b)    0.499    0.087    5.735    0.000    0.499    0.397

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .swls_t2           0.000                               0.000    0.000
    d_swl_1 (d_v_)    0.436    0.052    8.453    0.000    1.000    1.000
    swls_t1 (wb__)    0.989    0.055   17.936    0.000    1.000    1.000
   .s06_01_ (rs1b)    0.447    0.035   12.811    0.000    0.447    0.311
   .s06_02_ (rs2b)    0.565    0.035   15.992    0.000    0.565    0.416
   .s06_03_ (rs3b)    0.392    0.028   14.008    0.000    0.392    0.274
   .s06_04_ (rs4b)    0.784    0.046   17.129    0.000    0.784    0.504
   .s06_01_ (rs1b)    0.447    0.035   12.811    0.000    0.447    0.304
   .s06_02_ (rs2b)    0.565    0.035   15.992    0.000    0.565    0.408
   .s06_03_ (rs3b)    0.392    0.028   14.008    0.000    0.392    0.268
   .s06_04_ (rs4b)    0.784    0.046   17.129    0.000    0.784    0.496
6.8.2.2 Meaning in life

Meaning in life: fitting multi-group models

Show the code
# adapt latent change score model from above and add grouping factor in estimation (also add vectorized equality constraints to the model)

# configural invariance
mi_lcs_meaning_group_cg_config <- '
meaning_t1 =~ 1*meaning_par1_t1 + c("lamb2a", "lamb2b")*meaning_par2_t1 + c("lamb3a", "lamb3b")*meaning_par3_t1 # This specifies the measurement model for meaning_t1 
meaning_t2 =~ 1*meaning_par1_t2 + c("lamb2a", "lamb2b")*meaning_par2_t2 + c("lamb3a", "lamb3b")*meaning_par3_t2 # This specifies the measurement model for meaning_t2 with the equality constrained factor loadings

meaning_t2 ~ 1*meaning_t1     # This parameter regresses meaning_t2 perfectly on meaning_t1
d_meaning_1 =~ 1*meaning_t2   # This defines the latent change score factor as measured perfectly by scores on meaning_t2
meaning_t2 ~ 0*1           # This line constrains the intercept of meaning_t2 to 0
meaning_t2 ~~ 0*meaning_t2    # This fixes the variance of meaning_t2 to 0

d_meaning_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
meaning_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of meaning_t1 
d_meaning_1 ~~ c("d_var_a", "d_var_b")*d_meaning_1   # This estimates the variance of the change scores 
meaning_t1 ~~ c("wb_var_a", "wb_var_b")*meaning_t1     # This estimates the variance of the meaning_t1 
d_meaning_1 ~~ c("fb_a", "fb_b")*meaning_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

meaning_par1_t1 ~~ c("cov1a", "cov1b")*meaning_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
meaning_par2_t1 ~~ c("cov2a", "cov2b")*meaning_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
meaning_par3_t1 ~~ c("cov3a", "cov3b")*meaning_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

meaning_par1_t1 ~~ c("res1a", "res1b")*meaning_par1_t1   # This allows residual variance on indicator X1 at T1 
meaning_par2_t1 ~~ c("res2a", "res2b")*meaning_par2_t1   # This allows residual variance on indicator X2 at T1
meaning_par3_t1 ~~ c("res3a", "res3b")*meaning_par3_t1   # This allows residual variance on indicator X3 at T1

meaning_par1_t2 ~~ c("res1a", "res1b")*meaning_par1_t2  # This allows residual variance on indicator X1 at T2 
meaning_par2_t2 ~~ c("res2a", "res2b")*meaning_par2_t2  # This allows residual variance on indicator X2 at T2 
meaning_par3_t2 ~~ c("res3a", "res3b")*meaning_par3_t2  # This allows residual variance on indicator X3 at T2

meaning_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
meaning_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
meaning_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

meaning_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
meaning_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
meaning_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'
lcs_meaning_group_cg_config <- sem(mi_lcs_meaning_group_cg_config, data=df_sbsa2_wide_wb, estimator='mlr', 
                                fixed.x=FALSE, missing='fiml', group = "group_cg")

# weak invariance
mi_lcs_meaning_group_cg_weak <- '
meaning_t1 =~ 1*meaning_par1_t1 + c("lamb2", "lamb2")*meaning_par2_t1 + c("lamb3", "lamb3")*meaning_par3_t1 # This specifies the measurement model for meaning_t1 
meaning_t2 =~ 1*meaning_par1_t2 + c("lamb2", "lamb2")*meaning_par2_t2 + c("lamb3", "lamb3")*meaning_par3_t2 # This specifies the measurement model for meaning_t2 with the equality constrained factor loadings

meaning_t2 ~ 1*meaning_t1     # This parameter regresses meaning_t2 perfectly on meaning_t1
d_meaning_1 =~ 1*meaning_t2   # This defines the latent change score factor as measured perfectly by scores on meaning_t2
meaning_t2 ~ 0*1           # This line constrains the intercept of meaning_t2 to 0
meaning_t2 ~~ 0*meaning_t2    # This fixes the variance of meaning_t2 to 0

d_meaning_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
meaning_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of meaning_t1 
d_meaning_1 ~~ c("d_var_a", "d_var_b")*d_meaning_1   # This estimates the variance of the change scores 
meaning_t1 ~~ c("wb_var_a", "wb_var_b")*meaning_t1     # This estimates the variance of the meaning_t1 
d_meaning_1 ~~ c("fb_a", "fb_b")*meaning_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

meaning_par1_t1 ~~ c("cov1a", "cov1b")*meaning_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
meaning_par2_t1 ~~ c("cov2a", "cov2b")*meaning_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
meaning_par3_t1 ~~ c("cov3a", "cov3b")*meaning_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

meaning_par1_t1 ~~ c("res1a", "res1b")*meaning_par1_t1   # This allows residual variance on indicator X1 at T1 
meaning_par2_t1 ~~ c("res2a", "res2b")*meaning_par2_t1   # This allows residual variance on indicator X2 at T1
meaning_par3_t1 ~~ c("res3a", "res3b")*meaning_par3_t1   # This allows residual variance on indicator X3 at T1

meaning_par1_t2 ~~ c("res1a", "res1b")*meaning_par1_t2  # This allows residual variance on indicator X1 at T2 
meaning_par2_t2 ~~ c("res2a", "res2b")*meaning_par2_t2  # This allows residual variance on indicator X2 at T2 
meaning_par3_t2 ~~ c("res3a", "res3b")*meaning_par3_t2  # This allows residual variance on indicator X3 at T2

meaning_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
meaning_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
meaning_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

meaning_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
meaning_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
meaning_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

lcs_meaning_group_cg_weak <- sem(mi_lcs_meaning_group_cg_weak, data=df_sbsa2_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml', 
                           group = "group_cg", group.equal = "loadings")

# strong invariance
mi_lcs_meaning_group_cg_strong <- '
meaning_t1 =~ 1*meaning_par1_t1 + c("lamb2", "lamb2")*meaning_par2_t1 + c("lamb3", "lamb3")*meaning_par3_t1 # This specifies the measurement model for meaning_t1 
meaning_t2 =~ 1*meaning_par1_t2 + c("lamb2", "lamb2")*meaning_par2_t2 + c("lamb3", "lamb3")*meaning_par3_t2 # This specifies the measurement model for meaning_t2 with the equality constrained factor loadings

meaning_t2 ~ 1*meaning_t1     # This parameter regresses meaning_t2 perfectly on meaning_t1
d_meaning_1 =~ 1*meaning_t2   # This defines the latent change score factor as measured perfectly by scores on meaning_t2
meaning_t2 ~ 0*1           # This line constrains the intercept of meaning_t2 to 0
meaning_t2 ~~ 0*meaning_t2    # This fixes the variance of meaning_t2 to 0

d_meaning_1 ~ c("d_int", "d_int")*1           # This estimates the intercept of the change score 
meaning_t1 ~ c("wb_int", "wb_int")*1            # This estimates the intercept of meaning_t1 
d_meaning_1 ~~ c("d_var_a", "d_var_b")*d_meaning_1   # This estimates the variance of the change scores 
meaning_t1 ~~ c("wb_var_a", "wb_var_b")*meaning_t1     # This estimates the variance of the meaning_t1 
d_meaning_1 ~~ c("fb_a", "fb_b")*meaning_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

meaning_par1_t1 ~~ c("cov1a", "cov1b")*meaning_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
meaning_par2_t1 ~~ c("cov2a", "cov2b")*meaning_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
meaning_par3_t1 ~~ c("cov3a", "cov3b")*meaning_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

meaning_par1_t1 ~~ c("res1a", "res1b")*meaning_par1_t1   # This allows residual variance on indicator X1 at T1 
meaning_par2_t1 ~~ c("res2a", "res2b")*meaning_par2_t1   # This allows residual variance on indicator X2 at T1
meaning_par3_t1 ~~ c("res3a", "res3b")*meaning_par3_t1   # This allows residual variance on indicator X3 at T1

meaning_par1_t2 ~~ c("res1a", "res1b")*meaning_par1_t2  # This allows residual variance on indicator X1 at T2 
meaning_par2_t2 ~~ c("res2a", "res2b")*meaning_par2_t2  # This allows residual variance on indicator X2 at T2 
meaning_par3_t2 ~~ c("res3a", "res3b")*meaning_par3_t2  # This allows residual variance on indicator X3 at T2

meaning_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
meaning_par2_t1 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T1
meaning_par3_t1 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T1

meaning_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
meaning_par2_t2 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T2
meaning_par3_t2 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T2
'

lcs_meaning_group_cg_strong <- sem(mi_lcs_meaning_group_cg_strong, data=df_sbsa2_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml', 
                             group = "group_cg", group.equal = c("intercepts", "loadings"))

Meaning in life: results

# model comparison tests for measurement invariance
lavTestLRT(lcs_meaning_group_cg_config, lcs_meaning_group_cg_weak, lcs_meaning_group_cg_strong)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                            Df   AIC   BIC  Chisq Chisq diff Df diff Pr(>Chisq)
lcs_meaning_group_cg_config 24 12026 12169 46.959                              
lcs_meaning_group_cg_weak   26 12024 12157 48.250     1.2423       2     0.5373
lcs_meaning_group_cg_strong 30 12017 12131 49.573     1.3251       4     0.8571
# show model with varying latent change parameters 
# -> key parameter is "d_meaning_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Control group, b = Intervention groups)
params_main_lcs_meaning_cg <- broom::tidy(lcs_meaning_group_cg_weak, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_wb_st2 %>% filter(trait=="meaning" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_meaning_1 ~1 "))
kable(params_main_lcs_meaning_cg, digits = 3) 
term label estimate beta std.all statistic p.value
d_meaning_1 ~1 d_int_a 0.288 0.248 0.415 4.496 0
d_meaning_1 ~1 d_int_b 0.213 0.183 0.316 6.659 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(lcs_meaning_group_cg_strong, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_wb_st2 %>% filter(trait=="meaning" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_meaning_1 ~1 ")), digits = 3) 
term label estimate beta std.all statistic p.value
d_meaning_1 ~1 d_int 0.227 0.195 0.326 7.866 0
d_meaning_1 ~1 d_int 0.227 0.195 0.338 7.866 0

Somewhat more positive change in meaning in life in the control group compared to the intervention groups but no substantial differences according to the LRTs.

# whole model (weak invariance)
summary(lcs_meaning_group_cg_weak, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 63 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        44
  Number of equality constraints                    16

  Number of observations per group:               Used       Total
    Control                                        175         175
    Intervention                                   673         674
  Number of missing patterns per group:                           
    Control                                          3            
    Intervention                                     2            

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                                48.250      44.213
  Degrees of freedom                                26          26
  P-value (Chi-square)                           0.005       0.014
  Scaling correction factor                                  1.091
    Yuan-Bentler correction (Mplus variant)                       
  Test statistic for each group:
    Control                                     11.795      10.809
    Intervention                                36.455      33.405

Model Test Baseline Model:

  Test statistic                              3773.876    2976.660
  Degrees of freedom                                30          30
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.268

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.994       0.994
  Tucker-Lewis Index (TLI)                       0.993       0.993
                                                                  
  Robust Comparative Fit Index (CFI)                         0.994
  Robust Tucker-Lewis Index (TLI)                            0.993

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -5983.908   -5983.908
  Scaling correction factor                                  0.733
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -5959.783   -5959.783
  Scaling correction factor                                  1.123
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                               12023.816   12023.816
  Bayesian (BIC)                             12156.617   12156.617
  Sample-size adjusted Bayesian (SABIC)      12067.697   12067.697

Root Mean Square Error of Approximation:

  RMSEA                                          0.045       0.041
  90 Percent confidence interval - lower         0.024       0.019
  90 Percent confidence interval - upper         0.064       0.060
  P-value H_0: RMSEA <= 0.050                    0.640       0.770
  P-value H_0: RMSEA >= 0.080                    0.001       0.000
                                                                  
  Robust RMSEA                                               0.046
  90 Percent confidence interval - lower                     0.022
  90 Percent confidence interval - upper                     0.068
  P-value H_0: Robust RMSEA <= 0.050                         0.589
  P-value H_0: Robust RMSEA >= 0.080                         0.004

Standardized Root Mean Square Residual:

  SRMR                                           0.028       0.028

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian


Group 1 [Control]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t1 =~                                                         
    mnn_1_1           1.000                               1.044    0.820
    mnn_2_1 (lmb2)    1.205    0.031   38.267    0.000    1.259    0.929
    mnn_3_1 (lmb3)    1.154    0.031   36.919    0.000    1.205    0.880
  meaning_t2 =~                                                         
    mnn_1_2           1.000                               1.053    0.823
    mnn_2_2 (lmb2)    1.205    0.031   38.267    0.000    1.269    0.930
    mnn_3_2 (lmb3)    1.154    0.031   36.919    0.000    1.215    0.882
  d_meaning_1 =~                                                        
    mnng_t2           1.000                               0.660    0.660

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t2 ~                                                          
    meaning_t1        1.000                               0.992    0.992

Covariances:
                     Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t1 ~~                                                           
    d_mnn_1 (fb_a)     -0.232    0.076   -3.067    0.002   -0.320   -0.320
 .meaning_par1_t1 ~~                                                      
   .mnn_1_2 (cov1)      0.303    0.063    4.792    0.000    0.303    0.572
 .meaning_par2_t1 ~~                                                      
   .mnn_2_2 (cov2)      0.049    0.053    0.933    0.351    0.049    0.196
 .meaning_par3_t1 ~~                                                      
   .mnn_3_2 (cov3)      0.145    0.057    2.530    0.011    0.145    0.343

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .mnng_t2           0.000                               0.000    0.000
    d_mnn_1 (d_n_)    0.288    0.064    4.496    0.000    0.415    0.415
    mnng_t1 (wb__)    3.192    0.094   33.854    0.000    3.056    3.056
   .mnn_1_1           0.000                               0.000    0.000
   .mnn_2_1  (m2a)   -0.041    0.122   -0.338    0.736   -0.041   -0.030
   .mnn_3_1  (m3a)   -0.050    0.119   -0.422    0.673   -0.050   -0.037
   .mnn_1_2           0.000                               0.000    0.000
   .mnn_2_2  (m2a)   -0.041    0.122   -0.338    0.736   -0.041   -0.030
   .mnn_3_2  (m3a)   -0.050    0.119   -0.422    0.673   -0.050   -0.037

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .mnng_t2           0.000                               0.000    0.000
    d_mnn_1 (d_v_)    0.482    0.080    6.053    0.000    1.000    1.000
    mnng_t1 (wb__)    1.091    0.136    8.023    0.000    1.000    1.000
   .mnn_1_1 (res1)    0.530    0.060    8.813    0.000    0.530    0.327
   .mnn_2_1 (res2)    0.252    0.053    4.793    0.000    0.252    0.137
   .mnn_3_1 (res3)    0.422    0.064    6.589    0.000    0.422    0.225
   .mnn_1_2 (res1)    0.530    0.060    8.813    0.000    0.530    0.323
   .mnn_2_2 (res2)    0.252    0.053    4.793    0.000    0.252    0.135
   .mnn_3_2 (res3)    0.422    0.064    6.589    0.000    0.422    0.222


Group 2 [Intervention]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t1 =~                                                         
    mnn_1_1           1.000                               0.978    0.800
    mnn_2_1 (lmb2)    1.205    0.031   38.267    0.000    1.179    0.918
    mnn_3_1 (lmb3)    1.154    0.031   36.919    0.000    1.129    0.866
  meaning_t2 =~                                                         
    mnn_1_2           1.000                               0.962    0.795
    mnn_2_2 (lmb2)    1.205    0.031   38.267    0.000    1.159    0.916
    mnn_3_2 (lmb3)    1.154    0.031   36.919    0.000    1.110    0.862
  d_meaning_1 =~                                                        
    mnng_t2           1.000                               0.699    0.699

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t2 ~                                                          
    meaning_t1        1.000                               1.017    1.017

Covariances:
                     Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t1 ~~                                                           
    d_mnn_1 (fb_b)     -0.242    0.037   -6.460    0.000   -0.368   -0.368
 .meaning_par1_t1 ~~                                                      
   .mnn_1_2 (cv1b)      0.247    0.031    8.007    0.000    0.247    0.460
 .meaning_par2_t1 ~~                                                      
   .mnn_2_2 (cv2b)      0.046    0.027    1.728    0.084    0.046    0.179
 .meaning_par3_t1 ~~                                                      
   .mnn_3_2 (cv3b)      0.151    0.031    4.830    0.000    0.151    0.355

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .mnng_t2           0.000                               0.000    0.000
    d_mnn_1 (d_n_)    0.213    0.032    6.659    0.000    0.316    0.316
    mnng_t1 (wb__)    3.208    0.044   73.285    0.000    3.280    3.280
   .mnn_1_1           0.000                               0.000    0.000
   .mnn_2_1  (m2b)   -0.055    0.107   -0.514    0.607   -0.055   -0.043
   .mnn_3_1  (m3b)   -0.043    0.105   -0.412    0.680   -0.043   -0.033
   .mnn_1_2           0.000                               0.000    0.000
   .mnn_2_2  (m2b)   -0.055    0.107   -0.514    0.607   -0.055   -0.044
   .mnn_3_2  (m3b)   -0.043    0.105   -0.412    0.680   -0.043   -0.033

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .mnng_t2           0.000                               0.000    0.000
    d_mnn_1 (d_v_)    0.452    0.054    8.420    0.000    1.000    1.000
    mnng_t1 (wb__)    0.957    0.069   13.920    0.000    1.000    1.000
   .mnn_1_1 (rs1b)    0.537    0.031   17.605    0.000    0.537    0.359
   .mnn_2_1 (rs2b)    0.259    0.028    9.221    0.000    0.259    0.157
   .mnn_3_1 (rs3b)    0.424    0.033   12.927    0.000    0.424    0.250
   .mnn_1_2 (rs1b)    0.537    0.031   17.605    0.000    0.537    0.367
   .mnn_2_2 (rs2b)    0.259    0.028    9.221    0.000    0.259    0.162
   .mnn_3_2 (rs3b)    0.424    0.033   12.927    0.000    0.424    0.256
6.8.2.3 Self-esteem

Self-esteem: fitting multi-group models

Show the code
# adapt latent change score model from above and add grouping factor in estimation (also add vectorized equality constraints to the model)

# configural invariance
mi_lcs_selfes_group_cg_config <- '
selfes_t1 =~ 1*selfes_par1_t1 + c("lamb2a", "lamb2b")*selfes_par2_t1 + c("lamb3a", "lamb3b")*selfes_par3_t1 # This specifies the measurement model for selfes_t1 
selfes_t2 =~ 1*selfes_par1_t2 + c("lamb2a", "lamb2b")*selfes_par2_t2 + c("lamb3a", "lamb3b")*selfes_par3_t2 # This specifies the measurement model for selfes_t2 with the equality constrained factor loadings

selfes_t2 ~ 1*selfes_t1     # This parameter regresses selfes_t2 perfectly on selfes_t1
d_selfes_1 =~ 1*selfes_t2   # This defines the latent change score factor as measured perfectly by scores on selfes_t2
selfes_t2 ~ 0*1           # This line constrains the intercept of selfes_t2 to 0
selfes_t2 ~~ 0*selfes_t2    # This fixes the variance of selfes_t2 to 0

d_selfes_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
selfes_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of selfes_t1 
d_selfes_1 ~~ c("d_var_a", "d_var_b")*d_selfes_1   # This estimates the variance of the change scores 
selfes_t1 ~~ c("wb_var_a", "wb_var_b")*selfes_t1     # This estimates the variance of the selfes_t1 
d_selfes_1 ~~ c("fb_a", "fb_b")*selfes_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

selfes_par1_t1 ~~ c("cov1a", "cov1b")*selfes_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
selfes_par2_t1 ~~ c("cov2a", "cov2b")*selfes_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
selfes_par3_t1 ~~ c("cov3a", "cov3b")*selfes_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

selfes_par1_t1 ~~ c("res1a", "res1b")*selfes_par1_t1   # This allows residual variance on indicator X1 at T1 
selfes_par2_t1 ~~ c("res2a", "res2b")*selfes_par2_t1   # This allows residual variance on indicator X2 at T1
selfes_par3_t1 ~~ c("res3a", "res3b")*selfes_par3_t1   # This allows residual variance on indicator X3 at T1

selfes_par1_t2 ~~ c("res1a", "res1b")*selfes_par1_t2  # This allows residual variance on indicator X1 at T2 
selfes_par2_t2 ~~ c("res2a", "res2b")*selfes_par2_t2  # This allows residual variance on indicator X2 at T2 
selfes_par3_t2 ~~ c("res3a", "res3b")*selfes_par3_t2  # This allows residual variance on indicator X3 at T2

selfes_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
selfes_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
selfes_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

selfes_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
selfes_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
selfes_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'
lcs_selfes_group_cg_config <- sem(mi_lcs_selfes_group_cg_config, data=df_sbsa2_wide_wb, estimator='mlr', 
                                fixed.x=FALSE, missing='fiml', group = "group_cg")

# weak invariance
mi_lcs_selfes_group_cg_weak <- '
selfes_t1 =~ 1*selfes_par1_t1 + c("lamb2", "lamb2")*selfes_par2_t1 + c("lamb3", "lamb3")*selfes_par3_t1 # This specifies the measurement model for selfes_t1 
selfes_t2 =~ 1*selfes_par1_t2 + c("lamb2", "lamb2")*selfes_par2_t2 + c("lamb3", "lamb3")*selfes_par3_t2 # This specifies the measurement model for selfes_t2 with the equality constrained factor loadings

selfes_t2 ~ 1*selfes_t1     # This parameter regresses selfes_t2 perfectly on selfes_t1
d_selfes_1 =~ 1*selfes_t2   # This defines the latent change score factor as measured perfectly by scores on selfes_t2
selfes_t2 ~ 0*1           # This line constrains the intercept of selfes_t2 to 0
selfes_t2 ~~ 0*selfes_t2    # This fixes the variance of selfes_t2 to 0

d_selfes_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
selfes_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of selfes_t1 
d_selfes_1 ~~ c("d_var_a", "d_var_b")*d_selfes_1   # This estimates the variance of the change scores 
selfes_t1 ~~ c("wb_var_a", "wb_var_b")*selfes_t1     # This estimates the variance of the selfes_t1 
d_selfes_1 ~~ c("fb_a", "fb_b")*selfes_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

selfes_par1_t1 ~~ c("cov1a", "cov1b")*selfes_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
selfes_par2_t1 ~~ c("cov2a", "cov2b")*selfes_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
selfes_par3_t1 ~~ c("cov3a", "cov3b")*selfes_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

selfes_par1_t1 ~~ c("res1a", "res1b")*selfes_par1_t1   # This allows residual variance on indicator X1 at T1 
selfes_par2_t1 ~~ c("res2a", "res2b")*selfes_par2_t1   # This allows residual variance on indicator X2 at T1
selfes_par3_t1 ~~ c("res3a", "res3b")*selfes_par3_t1   # This allows residual variance on indicator X3 at T1

selfes_par1_t2 ~~ c("res1a", "res1b")*selfes_par1_t2  # This allows residual variance on indicator X1 at T2 
selfes_par2_t2 ~~ c("res2a", "res2b")*selfes_par2_t2  # This allows residual variance on indicator X2 at T2 
selfes_par3_t2 ~~ c("res3a", "res3b")*selfes_par3_t2  # This allows residual variance on indicator X3 at T2

selfes_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
selfes_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
selfes_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

selfes_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
selfes_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
selfes_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

lcs_selfes_group_cg_weak <- sem(mi_lcs_selfes_group_cg_weak, data=df_sbsa2_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml', 
                           group = "group_cg", group.equal = "loadings")

# strong invariance
mi_lcs_selfes_group_cg_strong <- '
selfes_t1 =~ 1*selfes_par1_t1 + c("lamb2", "lamb2")*selfes_par2_t1 + c("lamb3", "lamb3")*selfes_par3_t1 # This specifies the measurement model for selfes_t1 
selfes_t2 =~ 1*selfes_par1_t2 + c("lamb2", "lamb2")*selfes_par2_t2 + c("lamb3", "lamb3")*selfes_par3_t2 # This specifies the measurement model for selfes_t2 with the equality constrained factor loadings

selfes_t2 ~ 1*selfes_t1     # This parameter regresses selfes_t2 perfectly on selfes_t1
d_selfes_1 =~ 1*selfes_t2   # This defines the latent change score factor as measured perfectly by scores on selfes_t2
selfes_t2 ~ 0*1           # This line constrains the intercept of selfes_t2 to 0
selfes_t2 ~~ 0*selfes_t2    # This fixes the variance of selfes_t2 to 0

d_selfes_1 ~ c("d_int", "d_int")*1           # This estimates the intercept of the change score 
selfes_t1 ~ c("wb_int", "wb_int")*1            # This estimates the intercept of selfes_t1 
d_selfes_1 ~~ c("d_var_a", "d_var_b")*d_selfes_1   # This estimates the variance of the change scores 
selfes_t1 ~~ c("wb_var_a", "wb_var_b")*selfes_t1     # This estimates the variance of the selfes_t1 
d_selfes_1 ~~ c("fb_a", "fb_b")*selfes_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

selfes_par1_t1 ~~ c("cov1a", "cov1b")*selfes_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
selfes_par2_t1 ~~ c("cov2a", "cov2b")*selfes_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
selfes_par3_t1 ~~ c("cov3a", "cov3b")*selfes_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

selfes_par1_t1 ~~ c("res1a", "res1b")*selfes_par1_t1   # This allows residual variance on indicator X1 at T1 
selfes_par2_t1 ~~ c("res2a", "res2b")*selfes_par2_t1   # This allows residual variance on indicator X2 at T1
selfes_par3_t1 ~~ c("res3a", "res3b")*selfes_par3_t1   # This allows residual variance on indicator X3 at T1

selfes_par1_t2 ~~ c("res1a", "res1b")*selfes_par1_t2  # This allows residual variance on indicator X1 at T2 
selfes_par2_t2 ~~ c("res2a", "res2b")*selfes_par2_t2  # This allows residual variance on indicator X2 at T2 
selfes_par3_t2 ~~ c("res3a", "res3b")*selfes_par3_t2  # This allows residual variance on indicator X3 at T2

selfes_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
selfes_par2_t1 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T1
selfes_par3_t1 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T1

selfes_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
selfes_par2_t2 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T2
selfes_par3_t2 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T2
'

lcs_selfes_group_cg_strong <- sem(mi_lcs_selfes_group_cg_strong, data=df_sbsa2_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml', 
                             group = "group_cg", group.equal = c("intercepts", "loadings"))

Self-esteem: results

# model comparison tests for measurement invariance
lavTestLRT(lcs_selfes_group_cg_config, lcs_selfes_group_cg_weak, lcs_selfes_group_cg_strong)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                           Df    AIC    BIC  Chisq Chisq diff Df diff
lcs_selfes_group_cg_config 24 8931.3 9073.6 19.210                   
lcs_selfes_group_cg_weak   26 8927.3 9060.1 19.239     0.0250       2
lcs_selfes_group_cg_strong 30 8924.0 9037.8 23.881     4.7871       4
                           Pr(>Chisq)
lcs_selfes_group_cg_config           
lcs_selfes_group_cg_weak       0.9876
lcs_selfes_group_cg_strong     0.3099
# show model with varying latent change parameters 
# -> key parameter is "d_selfes_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Control group, b = Intervention groups)
params_main_lcs_selfes_cg <- broom::tidy(lcs_selfes_group_cg_weak, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_wb_st2 %>% filter(trait=="selfes" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_selfes_1 ~1 "))
kable(params_main_lcs_selfes_cg, digits = 3) 
term label estimate beta std.all statistic p.value
d_selfes_1 ~1 d_int_a 0.187 0.212 0.587 5.602 0
d_selfes_1 ~1 d_int_b 0.264 0.300 0.546 11.524 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(lcs_selfes_group_cg_strong, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_wb_st2 %>% filter(trait=="selfes" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_selfes_1 ~1 ")), digits = 3) 
term label estimate beta std.all statistic p.value
d_selfes_1 ~1 d_int 0.24 0.272 0.743 12.613 0
d_selfes_1 ~1 d_int 0.24 0.272 0.496 12.613 0

Somewhat more positive change in self-esteem in the intervention groups compared to the control group but no substantial differences according to the LRTs.

# whole model (weak invariance)
summary(lcs_selfes_group_cg_weak, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 77 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        44
  Number of equality constraints                    16

  Number of observations per group:               Used       Total
    Control                                        175         175
    Intervention                                   673         674
  Number of missing patterns per group:                           
    Control                                          3            
    Intervention                                     2            

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                                19.239      18.070
  Degrees of freedom                                26          26
  P-value (Chi-square)                           0.826       0.873
  Scaling correction factor                                  1.065
    Yuan-Bentler correction (Mplus variant)                       
  Test statistic for each group:
    Control                                     10.644       9.997
    Intervention                                 8.596       8.073

Model Test Baseline Model:

  Test statistic                              4089.396    3147.214
  Degrees of freedom                                30          30
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.299

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    1.000       1.000
  Tucker-Lewis Index (TLI)                       1.002       1.003
                                                                  
  Robust Comparative Fit Index (CFI)                         1.000
  Robust Tucker-Lewis Index (TLI)                            1.002

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -4435.661   -4435.661
  Scaling correction factor                                  0.738
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -4426.042   -4426.042
  Scaling correction factor                                  1.114
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                                8927.323    8927.323
  Bayesian (BIC)                              9060.123    9060.123
  Sample-size adjusted Bayesian (SABIC)       8971.204    8971.204

Root Mean Square Error of Approximation:

  RMSEA                                          0.000       0.000
  90 Percent confidence interval - lower         0.000       0.000
  90 Percent confidence interval - upper         0.024       0.019
  P-value H_0: RMSEA <= 0.050                    1.000       1.000
  P-value H_0: RMSEA >= 0.080                    0.000       0.000
                                                                  
  Robust RMSEA                                               0.000
  90 Percent confidence interval - lower                     0.000
  90 Percent confidence interval - upper                     0.023
  P-value H_0: Robust RMSEA <= 0.050                         0.999
  P-value H_0: Robust RMSEA >= 0.080                         0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.017       0.017

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian


Group 1 [Control]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t1 =~                                                          
    slf_1_1           1.000                               0.795    0.909
    slf_2_1 (lmb2)    1.108    0.032   34.937    0.000    0.881    0.833
    slf_3_1 (lmb3)    1.241    0.024   50.718    0.000    0.986    0.947
  selfes_t2 =~                                                          
    slf_1_2           1.000                               0.804    0.911
    slf_2_2 (lmb2)    1.108    0.032   34.937    0.000    0.891    0.836
    slf_3_2 (lmb3)    1.241    0.024   50.718    0.000    0.998    0.948
  d_selfes_1 =~                                                         
    slfs_t2           1.000                               0.396    0.396

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t2 ~                                                           
    selfes_t1         1.000                               0.988    0.988

Covariances:
                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t1 ~~                                                           
    d_slf_1 (fb_a)    -0.043    0.023   -1.877    0.060   -0.170   -0.170
 .selfes_par1_t1 ~~                                                      
   .slf_1_2 (cov1)     0.058    0.017    3.335    0.001    0.058    0.439
 .selfes_par2_t1 ~~                                                      
   .slf_2_2 (cov2)     0.141    0.040    3.484    0.000    0.141    0.413
 .selfes_par3_t1 ~~                                                      
   .slf_3_2 (cov3)    -0.021    0.024   -0.894    0.372   -0.021   -0.193

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .slfs_t2           0.000                               0.000    0.000
    d_slf_1 (d_n_)    0.187    0.033    5.602    0.000    0.587    0.587
    slfs_t1 (wb__)    3.545    0.066   53.813    0.000    4.460    4.460
   .slf_1_1           0.000                               0.000    0.000
   .slf_2_1  (m2a)   -1.161    0.129   -9.034    0.000   -1.161   -1.099
   .slf_3_1  (m3a)   -1.150    0.099  -11.587    0.000   -1.150   -1.105
   .slf_1_2           0.000                               0.000    0.000
   .slf_2_2  (m2a)   -1.161    0.129   -9.034    0.000   -1.161   -1.090
   .slf_3_2  (m3a)   -1.150    0.099  -11.587    0.000   -1.150   -1.093

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .slfs_t2           0.000                               0.000    0.000
    d_slf_1 (d_v_)    0.101    0.023    4.465    0.000    1.000    1.000
    slfs_t1 (wb__)    0.632    0.063    9.978    0.000    1.000    1.000
   .slf_1_1 (res1)    0.133    0.016    8.199    0.000    0.133    0.174
   .slf_2_1 (res2)    0.341    0.044    7.838    0.000    0.341    0.305
   .slf_3_1 (res3)    0.111    0.024    4.689    0.000    0.111    0.103
   .slf_1_2 (res1)    0.133    0.016    8.199    0.000    0.133    0.170
   .slf_2_2 (res2)    0.341    0.044    7.838    0.000    0.341    0.300
   .slf_3_2 (res3)    0.111    0.024    4.689    0.000    0.111    0.100


Group 2 [Intervention]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t1 =~                                                          
    slf_1_1           1.000                               0.747    0.870
    slf_2_1 (lmb2)    1.108    0.032   34.937    0.000    0.828    0.802
    slf_3_1 (lmb3)    1.241    0.024   50.718    0.000    0.927    0.941
  selfes_t2 =~                                                          
    slf_1_2           1.000                               0.721    0.862
    slf_2_2 (lmb2)    1.108    0.032   34.937    0.000    0.799    0.791
    slf_3_2 (lmb3)    1.241    0.024   50.718    0.000    0.894    0.936
  d_selfes_1 =~                                                         
    slfs_t2           1.000                               0.670    0.670

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t2 ~                                                           
    selfes_t1         1.000                               1.037    1.037

Covariances:
                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t1 ~~                                                           
    d_slf_1 (fb_b)    -0.136    0.019   -7.341    0.000   -0.377   -0.377
 .selfes_par1_t1 ~~                                                      
   .slf_1_2 (cv1b)     0.072    0.012    6.216    0.000    0.072    0.399
 .selfes_par2_t1 ~~                                                      
   .slf_2_2 (cv2b)     0.155    0.021    7.440    0.000    0.155    0.408
 .selfes_par3_t1 ~~                                                      
   .slf_3_2 (cv3b)     0.000    0.015    0.016    0.988    0.000    0.002

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .slfs_t2           0.000                               0.000    0.000
    d_slf_1 (d_n_)    0.264    0.023   11.524    0.000    0.546    0.546
    slfs_t1 (wb__)    3.540    0.032  108.982    0.000    4.738    4.738
   .slf_1_1           0.000                               0.000    0.000
   .slf_2_1  (m2b)   -1.215    0.118  -10.257    0.000   -1.215   -1.177
   .slf_3_1  (m3b)   -1.168    0.094  -12.433    0.000   -1.168   -1.185
   .slf_1_2           0.000                               0.000    0.000
   .slf_2_2  (m2b)   -1.215    0.118  -10.257    0.000   -1.215   -1.204
   .slf_3_2  (m3b)   -1.168    0.094  -12.433    0.000   -1.168   -1.223

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .slfs_t2           0.000                               0.000    0.000
    d_slf_1 (d_v_)    0.233    0.025    9.267    0.000    1.000    1.000
    slfs_t1 (wb__)    0.558    0.033   16.833    0.000    1.000    1.000
   .slf_1_1 (rs1b)    0.180    0.012   15.063    0.000    0.180    0.244
   .slf_2_1 (rs2b)    0.381    0.022   17.472    0.000    0.381    0.357
   .slf_3_1 (rs3b)    0.112    0.016    7.128    0.000    0.112    0.115
   .slf_1_2 (rs1b)    0.180    0.012   15.063    0.000    0.180    0.257
   .slf_2_2 (rs2b)    0.381    0.022   17.472    0.000    0.381    0.374
   .slf_3_2 (rs3b)    0.112    0.016    7.128    0.000    0.112    0.123
6.8.2.4 Self-concept clarity

Self-concept clarity: fitting multi-group models

Show the code
# adapt latent change score model from above and add grouping factor in estimation (also add vectorized equality constraints to the model)

# configural invariance
mi_lcs_concept_group_cg_config <- '
concept_t1 =~ 1*concept_par1_t1 + c("lamb2a", "lamb2b")*concept_par2_t1 + c("lamb3a", "lamb3b")*concept_par3_t1 # This specifies the measurement model for concept_t1 
concept_t2 =~ 1*concept_par1_t2 + c("lamb2a", "lamb2b")*concept_par2_t2 + c("lamb3a", "lamb3b")*concept_par3_t2 # This specifies the measurement model for concept_t2 with the equality constrained factor loadings

concept_t2 ~ 1*concept_t1     # This parameter regresses concept_t2 perfectly on concept_t1
d_concept_1 =~ 1*concept_t2   # This defines the latent change score factor as measured perfectly by scores on concept_t2
concept_t2 ~ 0*1           # This line constrains the intercept of concept_t2 to 0
concept_t2 ~~ 0*concept_t2    # This fixes the variance of concept_t2 to 0

d_concept_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
concept_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of concept_t1 
d_concept_1 ~~ c("d_var_a", "d_var_b")*d_concept_1   # This estimates the variance of the change scores 
concept_t1 ~~ c("wb_var_a", "wb_var_b")*concept_t1     # This estimates the variance of the concept_t1 
d_concept_1 ~~ c("fb_a", "fb_b")*concept_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

concept_par1_t1 ~~ c("cov1a", "cov1b")*concept_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
concept_par2_t1 ~~ c("cov2a", "cov2b")*concept_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
concept_par3_t1 ~~ c("cov3a", "cov3b")*concept_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

concept_par1_t1 ~~ c("res1a", "res1b")*concept_par1_t1   # This allows residual variance on indicator X1 at T1 
concept_par2_t1 ~~ c("res2a", "res2b")*concept_par2_t1   # This allows residual variance on indicator X2 at T1
concept_par3_t1 ~~ c("res3a", "res3b")*concept_par3_t1   # This allows residual variance on indicator X3 at T1

concept_par1_t2 ~~ c("res1a", "res1b")*concept_par1_t2  # This allows residual variance on indicator X1 at T2 
concept_par2_t2 ~~ c("res2a", "res2b")*concept_par2_t2  # This allows residual variance on indicator X2 at T2 
concept_par3_t2 ~~ c("res3a", "res3b")*concept_par3_t2  # This allows residual variance on indicator X3 at T2

concept_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
concept_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
concept_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

concept_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
concept_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
concept_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'
lcs_concept_group_cg_config <- sem(mi_lcs_concept_group_cg_config, data=df_sbsa2_wide_wb, estimator='mlr', 
                                fixed.x=FALSE, missing='fiml', group = "group_cg")

# weak invariance
mi_lcs_concept_group_cg_weak <- '
concept_t1 =~ 1*concept_par1_t1 + c("lamb2", "lamb2")*concept_par2_t1 + c("lamb3", "lamb3")*concept_par3_t1 # This specifies the measurement model for concept_t1 
concept_t2 =~ 1*concept_par1_t2 + c("lamb2", "lamb2")*concept_par2_t2 + c("lamb3", "lamb3")*concept_par3_t2 # This specifies the measurement model for concept_t2 with the equality constrained factor loadings

concept_t2 ~ 1*concept_t1     # This parameter regresses concept_t2 perfectly on concept_t1
d_concept_1 =~ 1*concept_t2   # This defines the latent change score factor as measured perfectly by scores on concept_t2
concept_t2 ~ 0*1           # This line constrains the intercept of concept_t2 to 0
concept_t2 ~~ 0*concept_t2    # This fixes the variance of concept_t2 to 0

d_concept_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
concept_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of concept_t1 
d_concept_1 ~~ c("d_var_a", "d_var_b")*d_concept_1   # This estimates the variance of the change scores 
concept_t1 ~~ c("wb_var_a", "wb_var_b")*concept_t1     # This estimates the variance of the concept_t1 
d_concept_1 ~~ c("fb_a", "fb_b")*concept_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

concept_par1_t1 ~~ c("cov1a", "cov1b")*concept_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
concept_par2_t1 ~~ c("cov2a", "cov2b")*concept_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
concept_par3_t1 ~~ c("cov3a", "cov3b")*concept_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

concept_par1_t1 ~~ c("res1a", "res1b")*concept_par1_t1   # This allows residual variance on indicator X1 at T1 
concept_par2_t1 ~~ c("res2a", "res2b")*concept_par2_t1   # This allows residual variance on indicator X2 at T1
concept_par3_t1 ~~ c("res3a", "res3b")*concept_par3_t1   # This allows residual variance on indicator X3 at T1

concept_par1_t2 ~~ c("res1a", "res1b")*concept_par1_t2  # This allows residual variance on indicator X1 at T2 
concept_par2_t2 ~~ c("res2a", "res2b")*concept_par2_t2  # This allows residual variance on indicator X2 at T2 
concept_par3_t2 ~~ c("res3a", "res3b")*concept_par3_t2  # This allows residual variance on indicator X3 at T2

concept_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
concept_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
concept_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

concept_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
concept_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
concept_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

lcs_concept_group_cg_weak <- sem(mi_lcs_concept_group_cg_weak, data=df_sbsa2_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml', 
                           group = "group_cg", group.equal = "loadings")

# strong invariance
mi_lcs_concept_group_cg_strong <- '
concept_t1 =~ 1*concept_par1_t1 + c("lamb2", "lamb2")*concept_par2_t1 + c("lamb3", "lamb3")*concept_par3_t1 # This specifies the measurement model for concept_t1 
concept_t2 =~ 1*concept_par1_t2 + c("lamb2", "lamb2")*concept_par2_t2 + c("lamb3", "lamb3")*concept_par3_t2 # This specifies the measurement model for concept_t2 with the equality constrained factor loadings

concept_t2 ~ 1*concept_t1     # This parameter regresses concept_t2 perfectly on concept_t1
d_concept_1 =~ 1*concept_t2   # This defines the latent change score factor as measured perfectly by scores on concept_t2
concept_t2 ~ 0*1           # This line constrains the intercept of concept_t2 to 0
concept_t2 ~~ 0*concept_t2    # This fixes the variance of concept_t2 to 0

d_concept_1 ~ c("d_int", "d_int")*1           # This estimates the intercept of the change score 
concept_t1 ~ c("wb_int", "wb_int")*1            # This estimates the intercept of concept_t1 
d_concept_1 ~~ c("d_var_a", "d_var_b")*d_concept_1   # This estimates the variance of the change scores 
concept_t1 ~~ c("wb_var_a", "wb_var_b")*concept_t1     # This estimates the variance of the concept_t1 
d_concept_1 ~~ c("fb_a", "fb_b")*concept_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

concept_par1_t1 ~~ c("cov1a", "cov1b")*concept_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
concept_par2_t1 ~~ c("cov2a", "cov2b")*concept_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
concept_par3_t1 ~~ c("cov3a", "cov3b")*concept_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

concept_par1_t1 ~~ c("res1a", "res1b")*concept_par1_t1   # This allows residual variance on indicator X1 at T1 
concept_par2_t1 ~~ c("res2a", "res2b")*concept_par2_t1   # This allows residual variance on indicator X2 at T1
concept_par3_t1 ~~ c("res3a", "res3b")*concept_par3_t1   # This allows residual variance on indicator X3 at T1

concept_par1_t2 ~~ c("res1a", "res1b")*concept_par1_t2  # This allows residual variance on indicator X1 at T2 
concept_par2_t2 ~~ c("res2a", "res2b")*concept_par2_t2  # This allows residual variance on indicator X2 at T2 
concept_par3_t2 ~~ c("res3a", "res3b")*concept_par3_t2  # This allows residual variance on indicator X3 at T2

concept_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
concept_par2_t1 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T1
concept_par3_t1 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T1

concept_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
concept_par2_t2 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T2
concept_par3_t2 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T2
'

lcs_concept_group_cg_strong <- sem(mi_lcs_concept_group_cg_strong, data=df_sbsa2_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml', 
                             group = "group_cg", group.equal = c("intercepts", "loadings"))

Self-concept clarity: results

# model comparison tests for measurement invariance
lavTestLRT(lcs_concept_group_cg_config, lcs_concept_group_cg_weak, lcs_concept_group_cg_strong)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                            Df    AIC    BIC  Chisq Chisq diff Df diff
lcs_concept_group_cg_config 24 9207.1 9349.4 43.255                   
lcs_concept_group_cg_weak   26 9203.5 9336.3 43.649     0.3759       2
lcs_concept_group_cg_strong 30 9202.1 9315.9 50.202     6.6192       4
                            Pr(>Chisq)
lcs_concept_group_cg_config           
lcs_concept_group_cg_weak       0.8287
lcs_concept_group_cg_strong     0.1574
# show model with varying latent change parameters 
# -> key parameter is "d_concept_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Control group, b = Intervention groups)
params_main_lcs_concept_cg <- broom::tidy(lcs_concept_group_cg_weak, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_wb_st2 %>% filter(trait=="concept" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_concept_1 ~1 "))
kable(params_main_lcs_concept_cg, digits = 3) 
term label estimate beta std.all statistic p.value
d_concept_1 ~1 d_int_a 0.057 0.064 0.119 1.321 0.186
d_concept_1 ~1 d_int_b 0.178 0.199 0.355 7.628 0.000
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(lcs_concept_group_cg_strong, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_wb_st2 %>% filter(trait=="concept" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_concept_1 ~1 ")), digits = 3) 
term label estimate beta std.all statistic p.value
d_concept_1 ~1 d_int 0.152 0.17 0.309 7.24 0
d_concept_1 ~1 d_int 0.152 0.17 0.303 7.24 0

Somewhat more positive change in self-concept clarity in the intervention groups compared to the control group but no substantial differences according to the LRTs.

# whole model (weak invariance)
summary(lcs_concept_group_cg_weak, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 74 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        44
  Number of equality constraints                    16

  Number of observations per group:               Used       Total
    Control                                        175         175
    Intervention                                   673         674
  Number of missing patterns per group:                           
    Control                                          3            
    Intervention                                     2            

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                                43.649      40.140
  Degrees of freedom                                26          26
  P-value (Chi-square)                           0.016       0.038
  Scaling correction factor                                  1.087
    Yuan-Bentler correction (Mplus variant)                       
  Test statistic for each group:
    Control                                     21.176      19.473
    Intervention                                22.474      20.667

Model Test Baseline Model:

  Test statistic                              3923.270    2848.965
  Degrees of freedom                                30          30
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.377

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.995       0.995
  Tucker-Lewis Index (TLI)                       0.995       0.994
                                                                  
  Robust Comparative Fit Index (CFI)                         0.996
  Robust Tucker-Lewis Index (TLI)                            0.995

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -4573.770   -4573.770
  Scaling correction factor                                  0.748
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -4551.945   -4551.945
  Scaling correction factor                                  1.133
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                                9203.540    9203.540
  Bayesian (BIC)                              9336.340    9336.340
  Sample-size adjusted Bayesian (SABIC)       9247.421    9247.421

Root Mean Square Error of Approximation:

  RMSEA                                          0.040       0.036
  90 Percent confidence interval - lower         0.017       0.011
  90 Percent confidence interval - upper         0.060       0.056
  P-value H_0: RMSEA <= 0.050                    0.774       0.869
  P-value H_0: RMSEA >= 0.080                    0.000       0.000
                                                                  
  Robust RMSEA                                               0.041
  90 Percent confidence interval - lower                     0.014
  90 Percent confidence interval - upper                     0.064
  P-value H_0: Robust RMSEA <= 0.050                         0.707
  P-value H_0: Robust RMSEA >= 0.080                         0.002

Standardized Root Mean Square Residual:

  SRMR                                           0.021       0.021

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian


Group 1 [Control]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t1 =~                                                         
    cnc_1_1           1.000                               0.759    0.840
    cnc_2_1 (lmb2)    1.280    0.035   36.777    0.000    0.972    0.923
    cnc_3_1 (lmb3)    1.401    0.035   39.940    0.000    1.064    0.953
  concept_t2 =~                                                         
    cnc_1_2           1.000                               0.782    0.847
    cnc_2_2 (lmb2)    1.280    0.035   36.777    0.000    1.002    0.927
    cnc_3_2 (lmb3)    1.401    0.035   39.940    0.000    1.096    0.955
  d_concept_1 =~                                                        
    cncpt_2           1.000                               0.614    0.614

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t2 ~                                                          
    concept_t1        1.000                               0.970    0.970

Covariances:
                     Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t1 ~~                                                           
    d_cnc_1 (fb_a)     -0.097    0.035   -2.758    0.006   -0.267   -0.267
 .concept_par1_t1 ~~                                                      
   .cnc_1_2 (cov1)      0.095    0.021    4.605    0.000    0.095    0.396
 .concept_par2_t1 ~~                                                      
   .cnc_2_2 (cov2)      0.082    0.025    3.247    0.001    0.082    0.502
 .concept_par3_t1 ~~                                                      
   .cnc_3_2 (cov3)      0.001    0.024    0.047    0.963    0.001    0.010

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .cncpt_2           0.000                               0.000    0.000
    d_cnc_1 (d_n_)    0.057    0.043    1.321    0.186    0.119    0.119
    cncpt_1 (wb__)    3.122    0.066   47.255    0.000    4.113    4.113
   .cnc_1_1           0.000                               0.000    0.000
   .cnc_2_1  (m2a)   -0.898    0.126   -7.106    0.000   -0.898   -0.853
   .cnc_3_1  (m3a)   -1.311    0.124  -10.568    0.000   -1.311   -1.174
   .cnc_1_2           0.000                               0.000    0.000
   .cnc_2_2  (m2a)   -0.898    0.126   -7.106    0.000   -0.898   -0.831
   .cnc_3_2  (m3a)   -1.311    0.124  -10.568    0.000   -1.311   -1.142

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .cncpt_2           0.000                               0.000    0.000
    d_cnc_1 (d_v_)    0.231    0.065    3.529    0.000    1.000    1.000
    cncpt_1 (wb__)    0.576    0.053   10.803    0.000    1.000    1.000
   .cnc_1_1 (res1)    0.240    0.020   12.122    0.000    0.240    0.294
   .cnc_2_1 (res2)    0.163    0.026    6.188    0.000    0.163    0.148
   .cnc_3_1 (res3)    0.115    0.027    4.197    0.000    0.115    0.093
   .cnc_1_2 (res1)    0.240    0.020   12.122    0.000    0.240    0.282
   .cnc_2_2 (res2)    0.163    0.026    6.188    0.000    0.163    0.140
   .cnc_3_2 (res3)    0.115    0.027    4.197    0.000    0.115    0.088


Group 2 [Intervention]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t1 =~                                                         
    cnc_1_1           1.000                               0.679    0.800
    cnc_2_1 (lmb2)    1.280    0.035   36.777    0.000    0.870    0.884
    cnc_3_1 (lmb3)    1.401    0.035   39.940    0.000    0.952    0.920
  concept_t2 =~                                                         
    cnc_1_2           1.000                               0.665    0.794
    cnc_2_2 (lmb2)    1.280    0.035   36.777    0.000    0.851    0.880
    cnc_3_2 (lmb3)    1.401    0.035   39.940    0.000    0.932    0.917
  d_concept_1 =~                                                        
    cncpt_2           1.000                               0.754    0.754

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t2 ~                                                          
    concept_t1        1.000                               1.022    1.022

Covariances:
                     Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t1 ~~                                                           
    d_cnc_1 (fb_b)     -0.135    0.018   -7.604    0.000   -0.397   -0.397
 .concept_par1_t1 ~~                                                      
   .cnc_1_2 (cv1b)      0.071    0.014    4.914    0.000    0.071    0.272
 .concept_par2_t1 ~~                                                      
   .cnc_2_2 (cv2b)      0.074    0.015    5.011    0.000    0.074    0.349
 .concept_par3_t1 ~~                                                      
   .cnc_3_2 (cv3b)      0.034    0.015    2.219    0.026    0.034    0.204

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .cncpt_2           0.000                               0.000    0.000
    d_cnc_1 (d_n_)    0.178    0.023    7.628    0.000    0.355    0.355
    cncpt_1 (wb__)    3.043    0.031   98.763    0.000    4.480    4.480
   .cnc_1_1           0.000                               0.000    0.000
   .cnc_2_1  (m2b)   -0.906    0.114   -7.930    0.000   -0.906   -0.921
   .cnc_3_1  (m3b)   -1.330    0.113  -11.756    0.000   -1.330   -1.286
   .cnc_1_2           0.000                               0.000    0.000
   .cnc_2_2  (m2b)   -0.906    0.114   -7.930    0.000   -0.906   -0.936
   .cnc_3_2  (m3b)   -1.330    0.113  -11.756    0.000   -1.330   -1.309

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .cncpt_2           0.000                               0.000    0.000
    d_cnc_1 (d_v_)    0.251    0.026    9.559    0.000    1.000    1.000
    cncpt_1 (wb__)    0.461    0.029   15.963    0.000    1.000    1.000
   .cnc_1_1 (rs1b)    0.260    0.014   18.336    0.000    0.260    0.360
   .cnc_2_1 (rs2b)    0.212    0.015   14.374    0.000    0.212    0.219
   .cnc_3_1 (rs3b)    0.165    0.018    8.956    0.000    0.165    0.154
   .cnc_1_2 (rs1b)    0.260    0.014   18.336    0.000    0.260    0.370
   .cnc_2_2 (rs2b)    0.212    0.015   14.374    0.000    0.212    0.226
   .cnc_3_2 (rs3b)    0.165    0.018    8.956    0.000    0.165    0.160
6.8.2.5 Summary of latent main effects
params_main_wb_summary_cg <- bind_rows(
  params_main_lcs_swls_cg %>% mutate(trait = "Life satisfaction") %>% select(trait, group = label, estimate, beta, p.value),
  params_main_lcs_meaning_cg %>% mutate(trait = "Meaning in life") %>% select(trait, group = label, estimate, beta, p.value),
  params_main_lcs_selfes_cg %>% mutate(trait = "Self-esteem") %>% select(trait, group = label, estimate, beta, p.value),
  params_main_lcs_concept_cg %>% mutate(trait = "Self-concept clarity") %>% select(trait, group = label, estimate, beta, p.value)) %>% mutate(group = ifelse(group=="d_int_a", "Control", "Intervention"))

kable(params_main_wb_summary_cg, digits = 3)
trait group estimate beta p.value
Life satisfaction Control 0.243 0.245 0.000
Life satisfaction Intervention 0.273 0.275 0.000
Meaning in life Control 0.288 0.248 0.000
Meaning in life Intervention 0.213 0.183 0.000
Self-esteem Control 0.187 0.212 0.000
Self-esteem Intervention 0.264 0.300 0.000
Self-concept clarity Control 0.057 0.064 0.186
Self-concept clarity Intervention 0.178 0.199 0.000

6.8.3 Profile correlations / squared diffs: acceptance vs. improvement (MLMs)

Profile correlations by group and measurement occasion (multilevel regression models) - results:

df_sbsa2_t1t2 <- df_sbsa2 %>% filter(rando!="Waitlist-Control" & time %in% c(1,2)) %>% mutate(time_d = time - 1)

psych::describeBy(df_sbsa2_t1t2$profile_corr_item_z, list(df_sbsa2_t1t2$rando, df_sbsa2_t1t2$time_d))

 Descriptive statistics by group 
: Self-Acceptance
: 0
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 335 0.42 0.49   0.37    0.38 0.43 -1.09 3.39  4.48 1.14     4.25 0.03
------------------------------------------------------------ 
: Self-Improvement
: 0
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 336 0.42 0.49   0.39     0.4 0.51 -0.89 2.33  3.22 0.47     0.36 0.03
------------------------------------------------------------ 
: Self-Acceptance
: 1
   vars   n mean  sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 284 0.55 0.5   0.52    0.53 0.48 -1.07 2.17  3.23 0.36      0.5 0.03
------------------------------------------------------------ 
: Self-Improvement
: 1
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 291 0.56 0.48   0.54    0.55 0.56 -0.62 1.83  2.45 0.19    -0.53 0.03
psych::describeBy(df_sbsa2_t1t2$profile_corr_facet_z, list(df_sbsa2_t1t2$rando, df_sbsa2_t1t2$time_d))

 Descriptive statistics by group 
: Self-Acceptance
: 0
   vars   n mean   sd median trimmed mad   min  max range skew kurtosis   se
X1    1 335 0.35 0.65   0.27    0.31 0.6 -1.07 3.77  4.84 0.93     2.14 0.04
------------------------------------------------------------ 
: Self-Improvement
: 0
   vars   n mean   sd median trimmed mad   min  max range skew kurtosis   se
X1    1 337 0.34 0.67   0.29    0.31 0.7 -1.23 2.53  3.75 0.46     0.04 0.04
------------------------------------------------------------ 
: Self-Acceptance
: 1
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 284 0.51 0.67   0.46    0.48 0.66 -1.34 3.09  4.43 0.42     0.32 0.04
------------------------------------------------------------ 
: Self-Improvement
: 1
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 292 0.53 0.66   0.49     0.5 0.69 -1.08 2.51   3.6 0.32    -0.32 0.04
lm_profile_corr_item <- lmerTest::lmer(profile_corr_item_z ~ time_d * rando + (1 | pid), data = df_sbsa2_t1t2)
lm_profile_corr_facet <- lmerTest::lmer(profile_corr_facet_z ~ time_d * rando + (1 | pid), data = df_sbsa2_t1t2)

kable(bind_rows(as.data.frame(summary(lm_profile_corr_item)$coefficients), as.data.frame(summary(lm_profile_corr_facet)$coefficients)) %>% as_tibble() %>% mutate(outcome = c(rep("Item-level profile corr.", 4), rep("Facet-level profile corr.", 4)), term = c(rep(c("Intercept", "time", "group", "time*group"), 2))) %>% select(outcome, term, everything()) %>% rename(p = `Pr(>|t|)`), digits = 3)
outcome term Estimate Std. Error df t value p
Item-level profile corr. Intercept 0.418 0.027 845.076 15.580 0.000
Item-level profile corr. time 0.129 0.021 592.195 6.065 0.000
Item-level profile corr. group 0.000 0.038 845.887 -0.012 0.990
Item-level profile corr. time*group 0.007 0.030 591.350 0.242 0.809
Facet-level profile corr. Intercept 0.350 0.036 846.010 9.723 0.000
Facet-level profile corr. time 0.164 0.028 595.605 5.783 0.000
Facet-level profile corr. group -0.008 0.051 846.005 -0.151 0.880
Facet-level profile corr. time*group 0.010 0.040 594.236 0.259 0.796

Squared trait-/facet-differences by group and measurement occasion (multilevel regression models) - results:

mod_traits_sqdiff_groups <- df_sbsa2_t1t2 %>% 
  select(pid, time_d, rando, ends_with("_sqdiff")) %>% 
  pivot_longer(ends_with("_sqdiff"), 
               names_to = "test", names_prefix = "facet", values_to = "score", values_drop_na = TRUE) %>% 
  group_by(pid, test) %>% 
  mutate(assessments = n()) %>% 
  ungroup() %>% 
  filter(assessments==2) %>% 
  select(-assessments) %>% 
  group_nest(test) %>% 
  mutate(lmer_mods = map(data, ~lmerTest::lmer(score ~ time_d * rando + (1 | pid), data = .x))) %>% 
  pull(lmer_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

mod_traits_sqdiff_groups_unlist <- as.data.frame(summary(mod_traits_sqdiff_groups[[1]])$coefficients) %>% as_tibble()
for (i in 2:length(mod_traits_sqdiff_groups)) {
  mod_traits_sqdiff_groups_unlist <- bind_rows(mod_traits_sqdiff_groups_unlist, 
                                               as.data.frame(summary(mod_traits_sqdiff_groups[[i]])$coefficients) %>% as_tibble())
}

kable(mod_traits_sqdiff_groups_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=4), 
               term = c(rep(c("Intercept", "time", "group", "time*group"), 20))) %>% 
        select(outcome, term, everything()) %>% rename(p = `Pr(>|t|)`) %>% 
        arrange(factor(outcome, levels = (names(b5_vars)))), 
      digits = 3)
outcome term Estimate Std. Error df t value p
extraversion Intercept 1.753 0.108 768.868 16.160 0.000
extraversion time -0.308 0.083 575.000 -3.693 0.000
extraversion group 0.172 0.152 768.868 1.128 0.259
extraversion time*group -0.126 0.117 575.000 -1.075 0.283
agreeableness Intercept 0.507 0.048 794.537 10.552 0.000
agreeableness time -0.078 0.039 574.000 -1.999 0.046
agreeableness group -0.032 0.067 794.537 -0.477 0.633
agreeableness time*group -0.037 0.055 574.000 -0.678 0.498
conscientiousness Intercept 1.661 0.113 752.187 14.681 0.000
conscientiousness time -0.139 0.084 575.000 -1.662 0.097
conscientiousness group -0.067 0.159 752.187 -0.421 0.674
conscientiousness time*group -0.060 0.117 575.000 -0.510 0.610
neuroticism Intercept 3.363 0.189 766.422 17.764 0.000
neuroticism time -0.636 0.145 575.000 -4.390 0.000
neuroticism group -0.018 0.266 766.422 -0.068 0.946
neuroticism time*group -0.121 0.203 575.000 -0.594 0.553
openness Intercept 0.464 0.048 823.546 9.580 0.000
openness time -0.054 0.042 573.000 -1.288 0.198
openness group 0.002 0.068 823.546 0.029 0.977
openness time*group -0.043 0.059 573.000 -0.738 0.461
sociability Intercept 2.989 0.179 797.073 16.696 0.000
sociability time -0.870 0.147 573.000 -5.907 0.000
sociability group -0.016 0.251 797.073 -0.066 0.948
sociability time*group 0.173 0.207 573.000 0.835 0.404
assertiveness Intercept 1.601 0.130 819.490 12.291 0.000
assertiveness time -0.116 0.112 572.000 -1.034 0.302
assertiveness group 0.304 0.183 819.490 1.663 0.097
assertiveness time*group -0.243 0.157 572.000 -1.540 0.124
energy Intercept 1.976 0.145 870.043 13.607 0.000
energy time -0.244 0.135 574.000 -1.803 0.072
energy group 0.127 0.204 870.043 0.624 0.533
energy time*group -0.182 0.190 574.000 -0.959 0.338
compassion Intercept 0.476 0.059 938.372 8.086 0.000
compassion time -0.053 0.060 574.000 -0.870 0.385
compassion group 0.139 0.083 938.372 1.684 0.093
compassion time*group -0.128 0.085 574.000 -1.511 0.131
respectfulness Intercept 0.520 0.061 825.639 8.474 0.000
respectfulness time 0.007 0.054 571.000 0.130 0.897
respectfulness group -0.025 0.086 825.639 -0.290 0.772
respectfulness time*group -0.038 0.075 571.000 -0.499 0.618
trust Intercept 1.239 0.094 934.116 13.146 0.000
trust time -0.309 0.096 573.000 -3.204 0.001
trust group -0.123 0.133 934.116 -0.930 0.353
trust time*group -0.039 0.136 573.000 -0.289 0.773
organization Intercept 1.852 0.146 796.417 12.680 0.000
organization time -0.143 0.120 574.000 -1.199 0.231
organization group -0.165 0.205 796.417 -0.806 0.421
organization time*group -0.011 0.168 574.000 -0.066 0.947
productiveness Intercept 2.834 0.171 802.138 16.604 0.000
productiveness time -0.355 0.143 571.000 -2.488 0.013
productiveness group 0.018 0.240 802.138 0.074 0.941
productiveness time*group -0.194 0.200 571.000 -0.966 0.335
responsibility Intercept 1.284 0.117 792.347 10.981 0.000
responsibility time -0.048 0.096 572.000 -0.499 0.618
responsibility group 0.060 0.164 792.347 0.364 0.716
responsibility time*group -0.179 0.134 572.000 -1.337 0.182
anxiety Intercept 4.276 0.252 810.764 17.001 0.000
anxiety time -0.620 0.211 575.000 -2.934 0.003
anxiety group 0.051 0.353 810.764 0.144 0.886
anxiety time*group -0.119 0.297 575.000 -0.401 0.689
depression Intercept 3.968 0.220 759.626 18.006 0.000
depression time -0.894 0.167 573.000 -5.356 0.000
depression group -0.076 0.310 759.626 -0.246 0.805
depression time*group 0.013 0.235 573.000 0.056 0.955
volatility Intercept 2.821 0.199 851.931 14.187 0.000
volatility time -0.464 0.180 575.000 -2.580 0.010
volatility group 0.041 0.279 851.931 0.149 0.882
volatility time*group -0.275 0.252 575.000 -1.088 0.277
curiosity Intercept 0.558 0.065 870.775 8.598 0.000
curiosity time -0.087 0.061 572.000 -1.431 0.153
curiosity group -0.003 0.091 870.775 -0.038 0.970
curiosity time*group 0.084 0.085 572.000 0.985 0.325
aesthetic Intercept 0.440 0.054 934.046 8.107 0.000
aesthetic time -0.045 0.056 571.000 -0.804 0.422
aesthetic group 0.011 0.076 934.046 0.150 0.880
aesthetic time*group -0.017 0.078 571.000 -0.211 0.833
imagination Intercept 1.173 0.108 781.107 10.813 0.000
imagination time -0.201 0.086 573.000 -2.333 0.020
imagination group 0.006 0.152 781.107 0.037 0.971
imagination time*group -0.027 0.121 573.000 -0.227 0.821

With both conceptualizations of the similarity / difference of current- and ideal-level personality (profile correlations / squared differences), we find no significant effects of group (at T1) or of interaction effects of group by measurement occasion (at T2).

6.8.4 Latent personality change: acceptance vs. improvement

6.8.4.1 Run models

Adapt latent change score model from above (but without any moderation) and add grouping factor in estimation (adding vectorized equality constraints to the model step by step):

Show the code
# create templates:

# configural invariance
trait_template_main_config <- '
trait_t1 =~ 1*ind01_t1 +  c("lamb2a", "lamb2b")*ind02_t1 + c("lamb3a", "lamb3b")*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 +  c("lamb2a", "lamb2b")*ind02_t2 + c("lamb3a", "lamb3b")*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ c("d_int_a", "d_int_b")*1              # This estimates the intercept of the change score 
trait_t1 ~ c("b5_int_a", "b5_int_b")*1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ c("d_var_a", "d_var_b")*d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ c("b5_var_a", "b5_var_b")*trait_t1         # This estimates the variance of trait_t1 
d_trait_1 ~~ c("fb_a", "fb_b")* trait_t1   # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional and the moderation effect on the change score

ind01_t1 ~~ c("cov1a", "cov1b")*ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ c("cov2a", "cov2b")*ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ c("cov3a", "cov3b")*ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ c("res1a", "res1b")*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ c("res2a", "res2b")*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ c("res3a", "res3b")*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ c("res1a", "res1b")*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ c("res2a", "res2b")*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ c("res3a", "res3b")*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

# weak invariance
trait_template_main_weak <- '
trait_t1 =~ 1*ind01_t1 +  c("lamb2", "lamb2")*ind02_t1 + c("lamb3", "lamb3")*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 +  c("lamb2", "lamb2")*ind02_t2 + c("lamb3", "lamb3")*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ c("d_int_a", "d_int_b")*1              # This estimates the intercept of the change score 
trait_t1 ~ c("b5_int_a", "b5_int_b")*1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ c("d_var_a", "d_var_b")*d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ c("b5_var_a", "b5_var_b")*trait_t1         # This estimates the variance of trait_t1 
d_trait_1 ~~ c("fb_a", "fb_b")* trait_t1   # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional and the moderation effect on the change score

ind01_t1 ~~ c("cov1a", "cov1b")*ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ c("cov2a", "cov2b")*ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ c("cov3a", "cov3b")*ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ c("res1a", "res1b")*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ c("res2a", "res2b")*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ c("res3a", "res3b")*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ c("res1a", "res1b")*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ c("res2a", "res2b")*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ c("res3a", "res3b")*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

# strong invariance
trait_template_main_strong <- '
trait_t1 =~ 1*ind01_t1 +  c("lamb2", "lamb2")*ind02_t1 + c("lamb3", "lamb3")*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 +  c("lamb2", "lamb2")*ind02_t2 + c("lamb3", "lamb3")*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ c("d_int", "d_int")*1              # This estimates the intercept of the change score 
trait_t1 ~ c("b5_int", "b5_int")*1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ c("d_var_a", "d_var_b")*d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ c("b5_var_a", "b5_var_b")*trait_t1         # This estimates the variance of trait_t1 
d_trait_1 ~~ c("fb_a", "fb_b")* trait_t1   # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional and the moderation effect on the change score

ind01_t1 ~~ c("cov1a", "cov1b")*ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ c("cov2a", "cov2b")*ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ c("cov3a", "cov3b")*ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ c("res1a", "res1b")*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ c("res2a", "res2b")*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ c("res3a", "res3b")*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ c("res1a", "res1b")*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ c("res2a", "res2b")*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ c("res3a", "res3b")*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T2
'

# strict invariance -> not really needed for this analysis

# loop across 5 traits
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # configural - current
  template_filled_config_current <- str_replace_all(trait_template_main_config, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_main_fit_config_current <- lavaan(template_filled_config_current, 
                                          data = bind_rows(df_sbsa2_wide_pers_sa_mod, df_sbsa2_wide_pers_sb_mod) %>% left_join(group_assign), 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_config_current")), template_filled_config_current))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_config_current")), trait_main_fit_config_current))
  # configural - ideal
  template_filled_config_ideal <- str_replace_all(trait_template_main_config, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_main_fit_config_ideal <- lavaan(template_filled_config_ideal, 
                                        data = bind_rows(df_sbsa2_wide_pers_sa_mod, df_sbsa2_wide_pers_sb_mod) %>% left_join(group_assign), 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_config_ideal")), template_filled_config_ideal))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_config_ideal")), trait_main_fit_config_ideal))
  # weak - current
  template_filled_weak_current <- str_replace_all(trait_template_main_weak, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_main_fit_weak_current <- lavaan(template_filled_weak_current, 
                                          data = bind_rows(df_sbsa2_wide_pers_sa_mod, df_sbsa2_wide_pers_sb_mod) %>% left_join(group_assign), 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando", group.equal = "loadings")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_weak_current")), template_filled_weak_current))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_weak_current")), trait_main_fit_weak_current))
  # weak - ideal
  template_filled_weak_ideal <- str_replace_all(trait_template_main_weak, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_main_fit_weak_ideal <- lavaan(template_filled_weak_ideal, 
                                        data = bind_rows(df_sbsa2_wide_pers_sa_mod, df_sbsa2_wide_pers_sb_mod) %>% left_join(group_assign), 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando", group.equal = "loadings")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_weak_ideal")), template_filled_weak_ideal))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_weak_ideal")), trait_main_fit_weak_ideal))
  # strong - current
  template_filled_strong_current <- str_replace_all(trait_template_main_strong, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_main_fit_strong_current <- lavaan(template_filled_strong_current, 
                                          data = bind_rows(df_sbsa2_wide_pers_sa_mod, df_sbsa2_wide_pers_sb_mod) %>% left_join(group_assign), 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando", group.equal = c("intercepts", "loadings"))
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_strong_current")), template_filled_strong_current))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_strong_current")), trait_main_fit_strong_current))
  # strong - ideal
  template_filled_strong_ideal <- str_replace_all(trait_template_main_strong, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_main_fit_strong_ideal <- lavaan(template_filled_strong_ideal, 
                                        data = bind_rows(df_sbsa2_wide_pers_sa_mod, df_sbsa2_wide_pers_sb_mod) %>% left_join(group_assign), 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando", group.equal = c("intercepts", "loadings"))
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_strong_ideal")), template_filled_strong_ideal))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_strong_ideal")), trait_main_fit_strong_ideal))
}
6.8.4.2 Current personality traits

Extraversion (current personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_extra_main_config_current, fit_lcs_extra_main_weak_current, fit_lcs_extra_main_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                  Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_extra_main_config_current 24 7146.6 7282.0 53.117                   
fit_lcs_extra_main_weak_current   26 7143.3 7269.6 53.765    0.62163       2
fit_lcs_extra_main_strong_current 30 7137.3 7245.6 55.770    2.00804       4
                                  Pr(>Chisq)
fit_lcs_extra_main_config_current           
fit_lcs_extra_main_weak_current       0.7328
fit_lcs_extra_main_strong_current     0.7343
# show model with varying latent change parameters 
# -> key parameter is "d_extra_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_extra_current <- broom::tidy(fit_lcs_extra_main_weak_current, conf.int = TRUE, conf.level = 0.999) %>% 
  mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="extra" & reference=="current" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_extra_current, digits = 3) 
term label estimate beta std.all statistic p.value sig_diff
d_extra_1 ~1 d_int_a 0.091 0.125 0.345 4.059 0
d_extra_1 ~1 d_int_b 0.090 0.123 0.322 3.653 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_extra_main_strong_current, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="extra" & reference=="current" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ")), digits = 3) 
term label estimate beta std.all statistic p.value
d_extra_1 ~1 d_int 0.09 0.123 0.340 5.195 0
d_extra_1 ~1 d_int 0.09 0.123 0.321 5.195 0
# model fit
kable(broom::glance(fit_lcs_extra_main_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 28 7143.252 7269.622 0.988 0.056 0.032

Very similar change in extraversion in both groups. No significant differences according to the LRTs.

Agreeableness (current personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_agree_main_config_current, fit_lcs_agree_main_weak_current, fit_lcs_agree_main_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                  Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_agree_main_config_current 24 5825.7 5961.1 19.373                   
fit_lcs_agree_main_weak_current   26 5822.4 5948.8 20.038    0.64885       2
fit_lcs_agree_main_strong_current 30 5815.3 5923.6 20.936    0.88490       4
                                  Pr(>Chisq)
fit_lcs_agree_main_config_current           
fit_lcs_agree_main_weak_current       0.7229
fit_lcs_agree_main_strong_current     0.9267
# show model with varying latent change parameters 
# -> key parameter is "d_agree_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_agree_current <- broom::tidy(fit_lcs_agree_main_weak_current, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="agree" & reference=="current" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_agree_current, digits = 3) 
term label estimate beta std.all statistic p.value sig_diff
d_agree_1 ~1 d_int_a 0.027 0.044 0.130 1.481 0.139
d_agree_1 ~1 d_int_b 0.020 0.032 0.098 1.103 0.270
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_agree_main_strong_current, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="agree" & reference=="current" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ")), digits = 3) 
term label estimate beta std.all statistic p.value
d_agree_1 ~1 d_int 0.023 0.037 0.109 1.774 0.076
d_agree_1 ~1 d_int 0.023 0.037 0.114 1.774 0.076
# model fit
kable(broom::glance(fit_lcs_agree_main_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 28 5822.398 5948.768 1 0 0.03

No change in agreeableness in both groups (increase is slightly larger in self-acceptance group). No significant differences according to the LRTs.

Conscientiousness (current personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_consc_main_config_current, fit_lcs_consc_main_weak_current, fit_lcs_consc_main_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                  Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_consc_main_config_current 24 6334.0 6469.4 27.962                   
fit_lcs_consc_main_weak_current   26 6333.8 6460.2 31.801     4.1607       2
fit_lcs_consc_main_strong_current 30 6332.5 6440.8 38.436     6.5293       4
                                  Pr(>Chisq)
fit_lcs_consc_main_config_current           
fit_lcs_consc_main_weak_current       0.1249
fit_lcs_consc_main_strong_current     0.1630
# show model with varying latent change parameters 
# -> key parameter is "d_consc_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_consc_current <- broom::tidy(fit_lcs_consc_main_weak_current, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="consc" & reference=="current" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_consc_current, digits = 3) 
term label estimate beta std.all statistic p.value sig_diff
d_consc_1 ~1 d_int_a 0.076 0.101 0.211 2.849 0.004
d_consc_1 ~1 d_int_b 0.101 0.134 0.252 3.582 0.000
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_consc_main_strong_current, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="consc" & reference=="current" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ")), digits = 3) 
term label estimate beta std.all statistic p.value
d_consc_1 ~1 d_int 0.088 0.117 0.243 4.466 0
d_consc_1 ~1 d_int 0.088 0.117 0.220 4.466 0
# model fit
kable(broom::glance(fit_lcs_consc_main_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 28 6333.835 6460.205 0.998 0.026 0.025

Similar change in conscientiousness in both groups (increase is slightly larger in self-acceptance group). No significant differences according to the LRTs.

Neuroticism (current personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_neuro_main_config_current, fit_lcs_neuro_main_weak_current, fit_lcs_neuro_main_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                  Df    AIC  BIC  Chisq Chisq diff Df diff
fit_lcs_neuro_main_config_current 24 6778.6 6914 22.183                   
fit_lcs_neuro_main_weak_current   26 6775.6 6902 23.190     1.1350       2
fit_lcs_neuro_main_strong_current 30 6769.7 6878 25.319     2.1364       4
                                  Pr(>Chisq)
fit_lcs_neuro_main_config_current           
fit_lcs_neuro_main_weak_current       0.5669
fit_lcs_neuro_main_strong_current     0.7107
# show model with varying latent change parameters 
# -> key parameter is "d_neuro_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_neuro_current <- broom::tidy(fit_lcs_neuro_main_weak_current, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="neuro" & reference=="current" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_neuro_current, digits = 3) 
term label estimate beta std.all statistic p.value sig_diff
d_neuro_1 ~1 d_int_a -0.177 -0.206 -0.474 -6.345 0
d_neuro_1 ~1 d_int_b -0.179 -0.208 -0.390 -5.609 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_neuro_main_strong_current, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="neuro" & reference=="current" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ")), digits = 3) 
term label estimate beta std.all statistic p.value
d_neuro_1 ~1 d_int -0.178 -0.206 -0.474 -8.438 0
d_neuro_1 ~1 d_int -0.178 -0.206 -0.386 -8.438 0
# model fit
kable(broom::glance(fit_lcs_neuro_main_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 28 6775.592 6901.962 1 0 0.021

Similar change in neuroticism in both groups (decrease is slightly larger in self-improvement group). No significant differences according to the LRTs.

Openness (current personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_openn_main_config_current, fit_lcs_openn_main_weak_current, fit_lcs_openn_main_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                  Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_openn_main_config_current 24 6192.9 6328.3 22.020                   
fit_lcs_openn_main_weak_current   26 6196.1 6322.4 29.146     6.6790       2
fit_lcs_openn_main_strong_current 30 6196.0 6304.3 37.047     7.9676       4
                                  Pr(>Chisq)  
fit_lcs_openn_main_config_current             
fit_lcs_openn_main_weak_current      0.03546 *
fit_lcs_openn_main_strong_current    0.09277 .
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> key parameter is "d_openn_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_openn_current <- broom::tidy(fit_lcs_openn_main_weak_current, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="openn" & reference=="current" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_openn_current, digits = 3) 
term label estimate beta std.all statistic p.value sig_diff
d_openn_1 ~1 d_int_a 0.076 0.118 0.314 3.416 0.001
d_openn_1 ~1 d_int_b 0.077 0.119 0.295 3.243 0.001
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_openn_main_strong_current, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="openn" & reference=="current" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ")), digits = 3) 
term label estimate beta std.all statistic p.value
d_openn_1 ~1 d_int 0.077 0.119 0.316 4.69 0
d_openn_1 ~1 d_int 0.077 0.119 0.294 4.69 0
# model fit
kable(broom::glance(fit_lcs_openn_main_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 28 6196.066 6322.436 0.999 0.019 0.036

Similar (quite small) change in openness in both groups (increase is slightly larger in self-acceptance group). No significant differences according to the LRTs.

6.8.4.3 Ideal personality traits

Extraversion (ideal personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_extra_main_config_ideal, fit_lcs_extra_main_weak_ideal, fit_lcs_extra_main_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_extra_main_config_ideal 24 6118.2 6253.6 34.532                   
fit_lcs_extra_main_weak_ideal   26 6116.0 6242.3 36.296     1.5068       2
fit_lcs_extra_main_strong_ideal 30 6109.0 6217.4 37.365     1.0521       4
                                Pr(>Chisq)
fit_lcs_extra_main_config_ideal           
fit_lcs_extra_main_weak_ideal       0.4708
fit_lcs_extra_main_strong_ideal     0.9018
# show model with varying latent change parameters 
# -> key parameter is "d_extra_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_extra_ideal <- broom::tidy(fit_lcs_extra_main_weak_ideal, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="extra" & reference=="ideal" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_extra_ideal, digits = 3) 
term label estimate beta std.all statistic p.value sig_diff
d_extra_1 ~1 d_int_a -0.018 -0.035 -0.071 -0.748 0.454
d_extra_1 ~1 d_int_b -0.022 -0.043 -0.086 -0.939 0.348
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_extra_main_strong_ideal, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="extra" & reference=="ideal" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ")), digits = 3) 
term label estimate beta std.all statistic p.value
d_extra_1 ~1 d_int -0.02 -0.039 -0.079 -1.204 0.229
d_extra_1 ~1 d_int -0.02 -0.039 -0.078 -1.204 0.229
# model fit
kable(broom::glance(fit_lcs_extra_main_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 28 6115.965 6242.335 0.99 0.034 0.043

Slight decrease in extraversion that is n.s. and slightly more pronounced in the self-acceptance group.

Agreeableness (ideal personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_agree_main_config_ideal, fit_lcs_agree_main_weak_ideal, fit_lcs_agree_main_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_agree_main_config_ideal 24 5819.9 5955.3 32.897                   
fit_lcs_agree_main_weak_ideal   26 5816.2 5942.5 33.204    0.30674       2
fit_lcs_agree_main_strong_ideal 30 5810.7 5919.0 35.765    2.51578       4
                                Pr(>Chisq)
fit_lcs_agree_main_config_ideal           
fit_lcs_agree_main_weak_ideal       0.8578
fit_lcs_agree_main_strong_ideal     0.6418
# show model with varying latent change parameters 
# -> key parameter is "d_agree_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_agree_ideal <- broom::tidy(fit_lcs_agree_main_weak_ideal, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="agree" & reference=="ideal" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_agree_ideal, digits = 3) 
term label estimate beta std.all statistic p.value sig_diff
d_agree_1 ~1 d_int_a 0.007 0.012 0.023 0.292 0.771
d_agree_1 ~1 d_int_b -0.030 -0.054 -0.112 -1.357 0.175
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_agree_main_strong_ideal, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="agree" & reference=="ideal" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ")), digits = 3) 
term label estimate beta std.all statistic p.value
d_agree_1 ~1 d_int -0.012 -0.023 -0.044 -0.793 0.428
d_agree_1 ~1 d_int -0.012 -0.023 -0.047 -0.793 0.428
# model fit
kable(broom::glance(fit_lcs_agree_main_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 28 5816.169 5942.539 0.995 0.029 0.03

Almost no change in agreeableness in both groups (n.s.). Slight decrease in self-acceptance group. No significant differences according to the LRTs.

Conscientiousness (ideal personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_consc_main_config_ideal, fit_lcs_consc_main_weak_ideal, fit_lcs_consc_main_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_consc_main_config_ideal 24 5019.9 5155.3 23.423                   
fit_lcs_consc_main_weak_ideal   26 5016.1 5142.5 23.669    0.21133       2
fit_lcs_consc_main_strong_ideal 30 5010.0 5118.3 25.547    1.86945       4
                                Pr(>Chisq)
fit_lcs_consc_main_config_ideal           
fit_lcs_consc_main_weak_ideal       0.8997
fit_lcs_consc_main_strong_ideal     0.7598
# show model with varying latent change parameters 
# -> key parameter is "d_consc_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_consc_ideal <- broom::tidy(fit_lcs_consc_main_weak_ideal, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="consc" & reference=="ideal" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_consc_ideal, digits = 3) 
term label estimate beta std.all statistic p.value sig_diff
d_consc_1 ~1 d_int_a 0.027 0.054 0.086 1.162 0.245
d_consc_1 ~1 d_int_b 0.010 0.020 0.036 0.441 0.659
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_consc_main_strong_ideal, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="consc" & reference=="ideal" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ")), digits = 3) 
term label estimate beta std.all statistic p.value
d_consc_1 ~1 d_int 0.018 0.036 0.057 1.118 0.264
d_consc_1 ~1 d_int 0.018 0.036 0.066 1.118 0.264
# model fit
kable(broom::glance(fit_lcs_consc_main_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 28 5016.132 5142.502 1 0 0.026

Almost no change in conscientiousness in both groups (n.s.). Increase is slightly less pronounced in self-acceptance group. No significant differences according to the LRTs.

Neuroticism (ideal personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_neuro_main_config_ideal, fit_lcs_neuro_main_weak_ideal, fit_lcs_neuro_main_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_neuro_main_config_ideal 24 5249.5 5384.9 27.220                   
fit_lcs_neuro_main_weak_ideal   26 5251.1 5377.5 32.857     4.4468       2
fit_lcs_neuro_main_strong_ideal 30 5245.2 5353.5 34.896     2.0381       4
                                Pr(>Chisq)
fit_lcs_neuro_main_config_ideal           
fit_lcs_neuro_main_weak_ideal       0.1082
fit_lcs_neuro_main_strong_ideal     0.7288
# show model with varying latent change parameters 
# -> key parameter is "d_neuro_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_neuro_ideal <- broom::tidy(fit_lcs_neuro_main_weak_ideal, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="neuro" & reference=="ideal" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_neuro_ideal, digits = 3) 
term label estimate beta std.all statistic p.value sig_diff
d_neuro_1 ~1 d_int_a -0.003 -0.007 -0.010 -0.126 0.900
d_neuro_1 ~1 d_int_b 0.043 0.085 0.116 1.552 0.121
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_neuro_main_strong_ideal, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="neuro" & reference=="ideal" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ")), digits = 3) 
term label estimate beta std.all statistic p.value
d_neuro_1 ~1 d_int 0.02 0.038 0.058 0.999 0.318
d_neuro_1 ~1 d_int 0.02 0.038 0.052 0.999 0.318
# model fit
kable(broom::glance(fit_lcs_neuro_main_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 28 5251.121 5377.491 0.996 0.028 0.038

Very similar change in neuroticism in both groups (slight decrease in self-improvement group). No significant differences according to the LRTs.

Openness (ideal personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_openn_main_config_ideal, fit_lcs_openn_main_weak_ideal, fit_lcs_openn_main_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_openn_main_config_ideal 24 5955.9 6091.3 45.711                   
fit_lcs_openn_main_weak_ideal   26 5952.8 6079.2 46.574     0.7624       2
fit_lcs_openn_main_strong_ideal 30 5948.8 6057.1 50.566     4.0761       4
                                Pr(>Chisq)
fit_lcs_openn_main_config_ideal           
fit_lcs_openn_main_weak_ideal       0.6831
fit_lcs_openn_main_strong_ideal     0.3958
# show model with varying latent change parameters 
# -> key parameter is "d_openn_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_openn_ideal <- broom::tidy(fit_lcs_openn_main_weak_ideal, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="openn" & reference=="ideal" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_openn_ideal, digits = 3) 
term label estimate beta std.all statistic p.value sig_diff
d_openn_1 ~1 d_int_a 0.015 0.026 0.071 0.924 0.356
d_openn_1 ~1 d_int_b 0.016 0.028 0.112 1.143 0.253
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_openn_main_strong_ideal, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="openn" & reference=="ideal" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ")), digits = 3) 
term label estimate beta std.all statistic p.value
d_openn_1 ~1 d_int 0.016 0.028 0.074 1.478 0.139
d_openn_1 ~1 d_int 0.016 0.028 0.109 1.478 0.139
# model fit
kable(broom::glance(fit_lcs_openn_main_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 28 5952.794 6079.164 0.985 0.048 0.038

Similar change in ideal-personality openness in both groups (slight decrease in self-improvement group). No significant differences according to the LRTs.

6.8.4.4 Summary of latent main effects
params_main_summary <- bind_rows(
  params_main_lcs_extra_current %>% mutate(trait = names(b5_vars)[1], self = "current") %>% select(trait, self, group = label, estimate, beta, p.value, sig_diff),
  params_main_lcs_extra_ideal %>% mutate(trait = names(b5_vars)[1], self = "ideal") %>% select(trait, self, group = label, estimate, beta, p.value, sig_diff),
  params_main_lcs_agree_current %>% mutate(trait = names(b5_vars)[2], self = "current") %>% select(trait, self, group = label, estimate, beta, p.value, sig_diff),
  params_main_lcs_agree_ideal %>% mutate(trait = names(b5_vars)[2], self = "ideal") %>% select(trait, self, group = label, estimate, beta, p.value, sig_diff),
  params_main_lcs_consc_current %>% mutate(trait = names(b5_vars)[3], self = "current") %>% select(trait, self, group = label, estimate, beta, p.value, sig_diff),
  params_main_lcs_consc_ideal %>% mutate(trait = names(b5_vars)[3], self = "ideal") %>% select(trait, self, group = label, estimate, beta, p.value, sig_diff),
  params_main_lcs_neuro_current %>% mutate(trait = names(b5_vars)[4], self = "current") %>% select(trait, self, group = label, estimate, beta, p.value, sig_diff),
  params_main_lcs_neuro_ideal %>% mutate(trait = names(b5_vars)[4], self = "ideal") %>% select(trait, self, group = label, estimate, beta, p.value, sig_diff),
  params_main_lcs_openn_current %>% mutate(trait = names(b5_vars)[5], self = "current") %>% select(trait, self, group = label, estimate, beta, p.value, sig_diff),
  params_main_lcs_openn_ideal %>% mutate(trait = names(b5_vars)[5], self = "ideal") %>% select(trait, self, group = label, estimate, beta, p.value, sig_diff)
) %>% mutate(group = ifelse(group=="d_int_a", "accept", "improve"))

kable(params_main_summary, digits = 3)
trait self group estimate beta p.value sig_diff
extraversion current accept 0.091 0.125 0.000
extraversion current improve 0.090 0.123 0.000
extraversion ideal accept -0.018 -0.035 0.454
extraversion ideal improve -0.022 -0.043 0.348
agreeableness current accept 0.027 0.044 0.139
agreeableness current improve 0.020 0.032 0.270
agreeableness ideal accept 0.007 0.012 0.771
agreeableness ideal improve -0.030 -0.054 0.175
conscientiousness current accept 0.076 0.101 0.004
conscientiousness current improve 0.101 0.134 0.000
conscientiousness ideal accept 0.027 0.054 0.245
conscientiousness ideal improve 0.010 0.020 0.659
neuroticism current accept -0.177 -0.206 0.000
neuroticism current improve -0.179 -0.208 0.000
neuroticism ideal accept -0.003 -0.007 0.900
neuroticism ideal improve 0.043 0.085 0.121
openness current accept 0.076 0.118 0.001
openness current improve 0.077 0.119 0.001
openness ideal accept 0.015 0.026 0.356
openness ideal improve 0.016 0.028 0.253

6.8.5 Latent personality change: intervention vs. control

6.8.5.1 Run models

After seeing that the two intervention groups do not differ substantially, we want to test the control group vs. the two intervention groups (all from T1 to T2).

# new data frame
df_sbsa2_wide_pers_int_cg <- df_sbsa2_wide_pers %>% 
  mutate(group_cg = ifelse(rando=="Waitlist-Control", "Control", "Intervention"))

df_sbsa2_wide_pers_int_cg %>% group_by(group_cg) %>% tally()
# A tibble: 2 × 2
  group_cg         n
  <chr>        <int>
1 Control        175
2 Intervention   674

Adapt latent change score model from above (but without any moderation) and add grouping factor in estimation (adding vectorized equality constraints to the model step by step):

Show the code
# create templates: -> same templates as above, we're only setting up a different group comparison!

# loop across 5 traits
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # configural - current
  template_filled_config_current_cg <- str_replace_all(trait_template_main_config, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_main_fit_config_current_cg <- lavaan(template_filled_config_current_cg, 
                                          data = df_sbsa2_wide_pers_int_cg, 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "group_cg")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_config_current_cg")), template_filled_config_current_cg))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_config_current_cg")), trait_main_fit_config_current_cg))
  # configural - ideal
  template_filled_config_ideal_cg <- str_replace_all(trait_template_main_config, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_main_fit_config_ideal_cg <- lavaan(template_filled_config_ideal_cg, 
                                        data = df_sbsa2_wide_pers_int_cg, 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "group_cg")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_config_ideal_cg")), template_filled_config_ideal_cg))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_config_ideal_cg")), trait_main_fit_config_ideal_cg))
  # weak - current
  template_filled_weak_current_cg <- str_replace_all(trait_template_main_weak, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_main_fit_weak_current_cg <- lavaan(template_filled_weak_current_cg, 
                                          data = df_sbsa2_wide_pers_int_cg, 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "group_cg", group.equal = "loadings")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_weak_current_cg")), template_filled_weak_current_cg))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_weak_current_cg")), trait_main_fit_weak_current_cg))
  # weak - ideal
  template_filled_weak_ideal_cg <- str_replace_all(trait_template_main_weak, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_main_fit_weak_ideal_cg <- lavaan(template_filled_weak_ideal_cg, 
                                        data = df_sbsa2_wide_pers_int_cg, 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "group_cg", group.equal = "loadings")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_weak_ideal_cg")), template_filled_weak_ideal_cg))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_weak_ideal_cg")), trait_main_fit_weak_ideal_cg))
  # strong - current
  template_filled_strong_current_cg <- str_replace_all(trait_template_main_strong, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_main_fit_strong_current_cg <- lavaan(template_filled_strong_current_cg, 
                                          data = df_sbsa2_wide_pers_int_cg, 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "group_cg", group.equal = c("intercepts", "loadings"))
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_strong_current_cg")), template_filled_strong_current_cg))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_strong_current_cg")), trait_main_fit_strong_current_cg))
  # strong - ideal
  template_filled_strong_ideal_cg <- str_replace_all(trait_template_main_strong, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_main_fit_strong_ideal_cg <- lavaan(template_filled_strong_ideal_cg, 
                                        data = df_sbsa2_wide_pers_int_cg, 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "group_cg", group.equal = c("intercepts", "loadings"))
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_strong_ideal_cg")), template_filled_strong_ideal_cg))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_strong_ideal_cg")), trait_main_fit_strong_ideal_cg))
}

Control group comes first in the multigroup SEM:
a = waitlist control group (N = 175), b = both intervention groups (N = 674)

6.8.5.2 Current personality traits

Extraversion (current personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_extra_main_config_current_cg, fit_lcs_extra_main_weak_current_cg, fit_lcs_extra_main_strong_current_cg)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                     Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_extra_main_config_current_cg 24 8961.3 9103.6 61.348                   
fit_lcs_extra_main_weak_current_cg   26 8958.1 9091.0 62.158    0.78754       2
fit_lcs_extra_main_strong_current_cg 30 8952.0 9065.8 64.005    1.86667       4
                                     Pr(>Chisq)
fit_lcs_extra_main_config_current_cg           
fit_lcs_extra_main_weak_current_cg       0.6745
fit_lcs_extra_main_strong_current_cg     0.7603
# show model with varying latent change parameters 
# -> key parameter is "d_extra_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = waitlist control group, b = both intervention groups)
params_main_lcs_extra_current_cg <- broom::tidy(fit_lcs_extra_main_weak_current_cg, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="extra" & reference=="current" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_extra_current_cg, digits = 3) 
term label estimate beta std.all statistic p.value sig_diff
d_extra_1 ~1 d_int_a 0.067 0.092 0.249 2.114 0.035
d_extra_1 ~1 d_int_b 0.093 0.127 0.335 5.377 0.000
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_extra_main_strong_current_cg, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="extra" & reference=="current" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ")), digits = 3) 
term label estimate beta std.all statistic p.value
d_extra_1 ~1 d_int 0.088 0.12 0.325 5.621 0
d_extra_1 ~1 d_int 0.088 0.12 0.316 5.621 0
# model fit
kable(broom::glance(fit_lcs_extra_main_weak_current_cg) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
849 28 8958.13 9090.964 0.988 0.057 0.034

No significant differences according to the LRTs but slight difference visible (stronger increase in intervention groups). Latent change score only significant (at p < .001) in the intervention groups.

Agreeableness (current personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_agree_main_config_current_cg, fit_lcs_agree_main_weak_current_cg, fit_lcs_agree_main_strong_current_cg)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                     Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_agree_main_config_current_cg 24 7366.5 7508.9 20.132                   
fit_lcs_agree_main_weak_current_cg   26 7363.4 7496.3 21.048    0.84014       2
fit_lcs_agree_main_strong_current_cg 30 7358.6 7472.5 24.196    3.16073       4
                                     Pr(>Chisq)
fit_lcs_agree_main_config_current_cg           
fit_lcs_agree_main_weak_current_cg       0.6570
fit_lcs_agree_main_strong_current_cg     0.5313
# show model with varying latent change parameters 
# -> key parameter is "d_agree_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = waitlist control group, b = both intervention groups)
params_main_lcs_agree_current_cg <- broom::tidy(fit_lcs_agree_main_weak_current_cg, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="agree" & reference=="current" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_agree_current_cg, digits = 3) 
term label estimate beta std.all statistic p.value sig_diff
d_agree_1 ~1 d_int_a 0.060 0.099 0.357 2.669 0.008
d_agree_1 ~1 d_int_b 0.022 0.036 0.112 1.814 0.070
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_agree_main_strong_current_cg, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="agree" & reference=="current" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ")), digits = 3) 
term label estimate beta std.all statistic p.value
d_agree_1 ~1 d_int 0.03 0.05 0.177 2.765 0.006
d_agree_1 ~1 d_int 0.03 0.05 0.153 2.765 0.006
# model fit
kable(broom::glance(fit_lcs_agree_main_weak_current_cg) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
849 28 7363.448 7496.282 1 0 0.022

No change in agreeableness in both groups (at p < .001). Effect is even slightly larger in control group. No significant differences according to the LRTs.

Conscientiousness (current personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_consc_main_config_current_cg, fit_lcs_consc_main_weak_current_cg, fit_lcs_consc_main_strong_current_cg)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                     Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_consc_main_config_current_cg 24 7918.3 8060.6 43.856                   
fit_lcs_consc_main_weak_current_cg   26 7916.0 8048.9 45.611     1.6745       2
fit_lcs_consc_main_strong_current_cg 30 7908.4 8022.3 45.965     0.3538       4
                                     Pr(>Chisq)
fit_lcs_consc_main_config_current_cg           
fit_lcs_consc_main_weak_current_cg       0.4329
fit_lcs_consc_main_strong_current_cg     0.9861
# show model with varying latent change parameters 
# -> key parameter is "d_consc_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = waitlist control group, b = both intervention groups)
params_main_lcs_consc_current_cg <- broom::tidy(fit_lcs_consc_main_weak_current_cg, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="consc" & reference=="current" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_consc_current_cg, digits = 3) 
term label estimate beta std.all statistic p.value sig_diff
d_consc_1 ~1 d_int_a 0.100 0.133 0.256 2.580 0.01
d_consc_1 ~1 d_int_b 0.089 0.118 0.232 4.549 0.00
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_consc_main_strong_current_cg, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="consc" & reference=="current" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ")), digits = 3) 
term label estimate beta std.all statistic p.value
d_consc_1 ~1 d_int 0.091 0.121 0.233 5.228 0
d_consc_1 ~1 d_int 0.091 0.121 0.238 5.228 0
# model fit
kable(broom::glance(fit_lcs_consc_main_weak_current_cg) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
849 28 7916.049 8048.882 0.995 0.042 0.017

Similar change in conscientiousness in both groups (increase is, however, not significant in the control group at p < .001). No significant differences according to the LRTs.

Neuroticism (current personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_neuro_main_config_current_cg, fit_lcs_neuro_main_weak_current_cg, fit_lcs_neuro_main_strong_current_cg)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                     Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_neuro_main_config_current_cg 24 8492.1 8634.4 20.359                   
fit_lcs_neuro_main_weak_current_cg   26 8488.3 8621.1 20.541     0.2174       2
fit_lcs_neuro_main_strong_current_cg 30 8484.3 8598.1 24.562     4.0126       4
                                     Pr(>Chisq)
fit_lcs_neuro_main_config_current_cg           
fit_lcs_neuro_main_weak_current_cg       0.8970
fit_lcs_neuro_main_strong_current_cg     0.4043
# show model with varying latent change parameters 
# -> key parameter is "d_neuro_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = waitlist control group, b = both intervention groups)
params_main_lcs_neuro_current_cg <- broom::tidy(fit_lcs_neuro_main_weak_current_cg, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="neuro" & reference=="current" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_neuro_current_cg, digits = 3) 
term label estimate beta std.all statistic p.value sig_diff
d_neuro_1 ~1 d_int_a -0.132 -0.153 -0.314 -3.112 0.002
d_neuro_1 ~1 d_int_b -0.177 -0.205 -0.421 -8.294 0.000
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_neuro_main_strong_current_cg, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="neuro" & reference=="current" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ")), digits = 3) 
term label estimate beta std.all statistic p.value
d_neuro_1 ~1 d_int -0.169 -0.195 -0.399 -8.783 0
d_neuro_1 ~1 d_int -0.169 -0.195 -0.402 -8.783 0
# model fit
kable(broom::glance(fit_lcs_neuro_main_weak_current_cg) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
849 28 8488.251 8621.085 1 0 0.015

No significant differences according to the LRTs but slight difference visible (stronger neuroticism decrease in intervention groups). Latent change score only significant (at p < .001) in the intervention groups.

Openness (current personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_openn_main_config_current_cg, fit_lcs_openn_main_weak_current_cg, fit_lcs_openn_main_strong_current_cg)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                     Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_openn_main_config_current_cg 24 7709.2 7851.5 20.211                   
fit_lcs_openn_main_weak_current_cg   26 7706.1 7838.9 21.083     0.8479       2
fit_lcs_openn_main_strong_current_cg 30 7702.8 7816.7 25.861     4.6250       4
                                     Pr(>Chisq)
fit_lcs_openn_main_config_current_cg           
fit_lcs_openn_main_weak_current_cg       0.6545
fit_lcs_openn_main_strong_current_cg     0.3280
# show model with varying latent change parameters 
# -> key parameter is "d_openn_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = waitlist control group, b = both intervention groups)
params_main_lcs_openn_current_cg <- broom::tidy(fit_lcs_openn_main_weak_current_cg, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="openn" & reference=="current" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_openn_current_cg, digits = 3) 
term label estimate beta std.all statistic p.value sig_diff
d_openn_1 ~1 d_int_a 0.020 0.031 0.070 0.611 0.541
d_openn_1 ~1 d_int_b 0.077 0.119 0.304 4.685 0.000
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_openn_main_strong_current_cg, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="openn" & reference=="current" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ")), digits = 3) 
term label estimate beta std.all statistic p.value
d_openn_1 ~1 d_int 0.066 0.101 0.226 4.435 0
d_openn_1 ~1 d_int 0.066 0.101 0.259 4.435 0
# model fit
kable(broom::glance(fit_lcs_openn_main_weak_current_cg) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
849 28 7706.065 7838.899 1 0 0.018

No significant differences according to the LRTs but difference visible, with stronger openness increase in intervention groups. Latent change score only significant in the intervention groups.

6.8.5.3 Ideal personality traits

Extraversion (ideal personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_extra_main_config_ideal_cg, fit_lcs_extra_main_weak_ideal_cg, fit_lcs_extra_main_strong_ideal_cg)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                   Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_extra_main_config_ideal_cg 24 7787.2 7929.5 34.170                   
fit_lcs_extra_main_weak_ideal_cg   26 7788.7 7921.5 39.678     4.0600       2
fit_lcs_extra_main_strong_ideal_cg 30 7782.6 7896.5 41.587     1.8754       4
                                   Pr(>Chisq)
fit_lcs_extra_main_config_ideal_cg           
fit_lcs_extra_main_weak_ideal_cg       0.1313
fit_lcs_extra_main_strong_ideal_cg     0.7587
# show model with varying latent change parameters 
# -> key parameter is "d_extra_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = waitlist control group, b = both intervention groups)
params_main_lcs_extra_ideal_cg <- broom::tidy(fit_lcs_extra_main_weak_ideal_cg, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="extra" & reference=="ideal" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_extra_ideal_cg, digits = 3) 
term label estimate beta std.all statistic p.value sig_diff
d_extra_1 ~1 d_int_a -0.006 -0.011 -0.023 -0.179 0.858
d_extra_1 ~1 d_int_b -0.019 -0.038 -0.080 -1.221 0.222
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_extra_main_strong_ideal_cg, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="extra" & reference=="ideal" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ")), digits = 3) 
term label estimate beta std.all statistic p.value
d_extra_1 ~1 d_int -0.016 -0.033 -0.067 -1.157 0.247
d_extra_1 ~1 d_int -0.016 -0.033 -0.068 -1.157 0.247
# model fit
kable(broom::glance(fit_lcs_extra_main_weak_ideal_cg) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
849 28 7788.687 7921.521 0.99 0.035 0.035

Slight decrease in extraversion that is n.s. and slightly more pronounced in the intervention groups. No significant differences according to the LRTs.

Agreeableness (ideal personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_agree_main_config_ideal_cg, fit_lcs_agree_main_weak_ideal_cg, fit_lcs_agree_main_strong_ideal_cg)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                   Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_agree_main_config_ideal_cg 24 7349.7 7492.0 32.746                   
fit_lcs_agree_main_weak_ideal_cg   26 7350.6 7483.4 37.683     4.4495       2
fit_lcs_agree_main_strong_ideal_cg 30 7343.8 7457.7 38.908     1.1770       4
                                   Pr(>Chisq)
fit_lcs_agree_main_config_ideal_cg           
fit_lcs_agree_main_weak_ideal_cg       0.1081
fit_lcs_agree_main_strong_ideal_cg     0.8819
# show model with varying latent change parameters 
# -> key parameter is "d_agree_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = waitlist control group, b = both intervention groups)
params_main_lcs_agree_ideal_cg <- broom::tidy(fit_lcs_agree_main_weak_ideal_cg, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="agree" & reference=="ideal" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_agree_ideal_cg, digits = 3) 
term label estimate beta std.all statistic p.value sig_diff
d_agree_1 ~1 d_int_a -0.015 -0.027 -0.046 -0.434 0.664
d_agree_1 ~1 d_int_b -0.011 -0.021 -0.041 -0.718 0.473
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_agree_main_strong_ideal_cg, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="agree" & reference=="ideal" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ")), digits = 3) 
term label estimate beta std.all statistic p.value
d_agree_1 ~1 d_int -0.012 -0.022 -0.037 -0.829 0.407
d_agree_1 ~1 d_int -0.012 -0.022 -0.043 -0.829 0.407
# model fit
kable(broom::glance(fit_lcs_agree_main_weak_ideal_cg) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
849 28 7350.615 7483.449 0.994 0.033 0.03

Almost no change in agreeableness in both groups (n.s.). No significant differences according to the LRTs.

Conscientiousness (ideal personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_consc_main_config_ideal_cg, fit_lcs_consc_main_weak_ideal_cg, fit_lcs_consc_main_strong_ideal_cg)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                   Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_consc_main_config_ideal_cg 24 6279.8 6422.1 18.930                   
fit_lcs_consc_main_weak_ideal_cg   26 6277.6 6410.5 20.817      1.641       2
fit_lcs_consc_main_strong_ideal_cg 30 6272.0 6385.9 23.213      2.413       4
                                   Pr(>Chisq)
fit_lcs_consc_main_config_ideal_cg           
fit_lcs_consc_main_weak_ideal_cg       0.4402
fit_lcs_consc_main_strong_ideal_cg     0.6603
# show model with varying latent change parameters 
# -> key parameter is "d_consc_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = waitlist control group, b = both intervention groups)
params_main_lcs_consc_ideal_cg <- broom::tidy(fit_lcs_consc_main_weak_ideal_cg, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="consc" & reference=="ideal" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_consc_ideal_cg, digits = 3) 
term label estimate beta std.all statistic p.value sig_diff
d_consc_1 ~1 d_int_a -0.031 -0.063 -0.099 -0.960 0.337
d_consc_1 ~1 d_int_b 0.018 0.037 0.061 1.122 0.262
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_consc_main_strong_ideal_cg, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="consc" & reference=="ideal" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ")), digits = 3) 
term label estimate beta std.all statistic p.value
d_consc_1 ~1 d_int 0.008 0.017 0.026 0.567 0.571
d_consc_1 ~1 d_int 0.008 0.017 0.028 0.567 0.571
# model fit
kable(broom::glance(fit_lcs_consc_main_weak_ideal_cg) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
849 28 6277.643 6410.477 1 0 0.021

Almost no change in conscientiousness in both groups (n.s.). No significant differences according to the LRTs.

Neuroticism (ideal personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_neuro_main_config_ideal_cg, fit_lcs_neuro_main_weak_ideal_cg, fit_lcs_neuro_main_strong_ideal_cg)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                   Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_neuro_main_config_ideal_cg 24 6589.6 6731.9 20.835                   
fit_lcs_neuro_main_weak_ideal_cg   26 6601.9 6734.8 37.160    12.0985       2
fit_lcs_neuro_main_strong_ideal_cg 30 6594.2 6708.1 37.434     0.2717       4
                                   Pr(>Chisq)   
fit_lcs_neuro_main_config_ideal_cg              
fit_lcs_neuro_main_weak_ideal_cg      0.00236 **
fit_lcs_neuro_main_strong_ideal_cg    0.99157   
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> key parameter is "d_neuro_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = waitlist control group, b = both intervention groups)
params_main_lcs_neuro_ideal_cg <- broom::tidy(fit_lcs_neuro_main_weak_ideal_cg, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="neuro" & reference=="ideal" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_neuro_ideal_cg, digits = 3) 
term label estimate beta std.all statistic p.value sig_diff
d_neuro_1 ~1 d_int_a 0.025 0.048 0.091 0.758 0.448
d_neuro_1 ~1 d_int_b 0.019 0.037 0.054 0.970 0.332
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_neuro_main_strong_ideal_cg, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="neuro" & reference=="ideal" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ")), digits = 3) 
term label estimate beta std.all statistic p.value
d_neuro_1 ~1 d_int 0.02 0.039 0.074 1.214 0.225
d_neuro_1 ~1 d_int 0.02 0.039 0.058 1.214 0.225
# model fit
kable(broom::glance(fit_lcs_neuro_main_weak_ideal_cg) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
849 28 6601.927 6734.761 0.994 0.032 0.04

Similar change in neuroticism in both groups. No significant differences according to the LRTs (at p < .001). Some evidence for significant increase in model fit when constraining factor structures to be equal (weak MI), but this does not concern the latent change score yet.

Openness (ideal personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_openn_main_config_ideal_cg, fit_lcs_openn_main_weak_ideal_cg, fit_lcs_openn_main_strong_ideal_cg)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                   Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_openn_main_config_ideal_cg 24 7407.5 7549.8 44.796                   
fit_lcs_openn_main_weak_ideal_cg   26 7406.6 7539.4 47.870     2.5646       2
fit_lcs_openn_main_strong_ideal_cg 30 7402.6 7516.5 51.960     3.9391       4
                                   Pr(>Chisq)
fit_lcs_openn_main_config_ideal_cg           
fit_lcs_openn_main_weak_ideal_cg       0.2774
fit_lcs_openn_main_strong_ideal_cg     0.4143
# show model with varying latent change parameters 
# -> key parameter is "d_openn_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = waitlist control group, b = both intervention groups)
params_main_lcs_openn_ideal_cg <- broom::tidy(fit_lcs_openn_main_weak_ideal_cg, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="openn" & reference=="ideal" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_openn_ideal_cg, digits = 3) 
term label estimate beta std.all statistic p.value sig_diff
d_openn_1 ~1 d_int_a 0.014 0.025 0.115 0.737 0.461
d_openn_1 ~1 d_int_b 0.016 0.027 0.090 1.513 0.130
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_openn_main_strong_ideal_cg, conf.int = TRUE, conf.level = 0.999) %>% 
        mutate(beta = estimate / 
           (sd_pers_st2 %>% filter(trait=="openn" & reference=="ideal" & time==1) %>% pull(sd_trait))) %>% 
        select(term, label, estimate, beta, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ")), digits = 3) 
term label estimate beta std.all statistic p.value
d_openn_1 ~1 d_int 0.015 0.026 0.123 1.657 0.097
d_openn_1 ~1 d_int 0.015 0.026 0.087 1.657 0.097
# model fit
kable(broom::glance(fit_lcs_openn_main_weak_ideal_cg) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
849 28 7406.556 7539.39 0.988 0.045 0.035

Similar change in ideal-personality openness in both groups. No significant differences according to the LRTs.

6.8.5.4 Summary of latent main effects
params_main_summary_cg <- bind_rows(
  params_main_lcs_extra_current_cg %>% mutate(trait = names(b5_vars)[1], self = "current") %>% select(trait, self, group = label, estimate, beta, p.value, sig_diff),
  params_main_lcs_extra_ideal_cg %>% mutate(trait = names(b5_vars)[1], self = "ideal") %>% select(trait, self, group = label, estimate, beta, p.value, sig_diff),
  params_main_lcs_agree_current_cg %>% mutate(trait = names(b5_vars)[2], self = "current") %>% select(trait, self, group = label, estimate, beta, p.value, sig_diff),
  params_main_lcs_agree_ideal_cg %>% mutate(trait = names(b5_vars)[2], self = "ideal") %>% select(trait, self, group = label, estimate, beta, p.value, sig_diff),
  params_main_lcs_consc_current_cg %>% mutate(trait = names(b5_vars)[3], self = "current") %>% select(trait, self, group = label, estimate, beta, p.value, sig_diff),
  params_main_lcs_consc_ideal_cg %>% mutate(trait = names(b5_vars)[3], self = "ideal") %>% select(trait, self, group = label, estimate, beta, p.value, sig_diff),
  params_main_lcs_neuro_current_cg %>% mutate(trait = names(b5_vars)[4], self = "current") %>% select(trait, self, group = label, estimate, beta, p.value, sig_diff),
  params_main_lcs_neuro_ideal_cg %>% mutate(trait = names(b5_vars)[4], self = "ideal") %>% select(trait, self, group = label, estimate, beta, p.value, sig_diff),
  params_main_lcs_openn_current_cg %>% mutate(trait = names(b5_vars)[5], self = "current") %>% select(trait, self, group = label, estimate, beta, p.value, sig_diff),
  params_main_lcs_openn_ideal_cg %>% mutate(trait = names(b5_vars)[5], self = "ideal") %>% select(trait, self, group = label, estimate, beta, p.value, sig_diff)
) %>% mutate(group = ifelse(group=="d_int_a", "Control", "Intervention"))

kable(params_main_summary_cg, digits = 3)
trait self group estimate beta p.value sig_diff
extraversion current Control 0.067 0.092 0.035
extraversion current Intervention 0.093 0.127 0.000
extraversion ideal Control -0.006 -0.011 0.858
extraversion ideal Intervention -0.019 -0.038 0.222
agreeableness current Control 0.060 0.099 0.008
agreeableness current Intervention 0.022 0.036 0.070
agreeableness ideal Control -0.015 -0.027 0.664
agreeableness ideal Intervention -0.011 -0.021 0.473
conscientiousness current Control 0.100 0.133 0.010
conscientiousness current Intervention 0.089 0.118 0.000
conscientiousness ideal Control -0.031 -0.063 0.337
conscientiousness ideal Intervention 0.018 0.037 0.262
neuroticism current Control -0.132 -0.153 0.002
neuroticism current Intervention -0.177 -0.205 0.000
neuroticism ideal Control 0.025 0.048 0.448
neuroticism ideal Intervention 0.019 0.037 0.332
openness current Control 0.020 0.031 0.541
openness current Intervention 0.077 0.119 0.000
openness ideal Control 0.014 0.025 0.461
openness ideal Intervention 0.016 0.027 0.130

6.8.6 Multilevel models: intervention groups vs. control group

Does it look differently if we test the control group vs. the two intervention groups (all from T1 to T2) using multilevel models instead of the multigroup SEM comparison?

We’ll do this for current personality, ideal personality, and well-being.

6.8.6.1 Run models

Create data frame:

Show the code
df_mlm_check_curr <- df_sbsa2 %>% 
  filter(time %in% c(1,2)) %>% 
  mutate(time_d = time - 1,
         intv = ifelse(rando!="Waitlist-Control", 1, 0)) %>% 
  select(pid, time_d, rando, intv, 
         paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_comb_curr"))

df_mlm_check_ideal <- df_sbsa2 %>% 
  filter(time %in% c(1,2)) %>% 
  mutate(time_d = time - 1,
         intv = ifelse(rando!="Waitlist-Control", 1, 0)) %>% 
  select(pid, time_d, rando, intv, 
         paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_comb_ideal"))

df_mlm_check_wb <- df_sbsa2 %>% 
  filter(time %in% c(1,2)) %>% 
  mutate(time_d = time - 1,
         intv = ifelse(rando!="Waitlist-Control", 1, 0)) %>% 
  select(pid, time_d, rando, intv, 
         swls, meaning, selfes, concept)

df_mlm_check_curr %>% group_by(intv, time_d) %>% tally()

Convert to long format and run model across all domains and facets:

Show the code
df_mlm_check_curr <- df_mlm_check_curr %>% 
  pivot_longer(ends_with("_comb_curr"), 
               names_to = "test", names_prefix = "facet", values_to = "score", values_drop_na = TRUE) %>% 
  group_nest(test) %>% 
  mutate(lmer_mods = map(data, ~lmerTest::lmer(score ~ time_d * intv + (1 | pid), data = .x))) %>% 
  pull(lmer_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_mlm_check_ideal <- df_mlm_check_ideal %>% 
  pivot_longer(ends_with("_comb_ideal"), 
               names_to = "test", names_prefix = "facet", values_to = "score", values_drop_na = TRUE) %>% 
  group_nest(test) %>% 
  mutate(lmer_mods = map(data, ~lmerTest::lmer(score ~ time_d * intv + (1 | pid), data = .x))) %>% 
  pull(lmer_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_mlm_check_wb <- df_mlm_check_wb %>% 
  pivot_longer(c(swls, meaning, selfes, concept), 
               names_to = "test", names_prefix = "facet", values_to = "score", values_drop_na = TRUE) %>% 
  group_nest(test) %>% 
  mutate(lmer_mods = map(data, ~lmerTest::lmer(score ~ time_d * intv + (1 | pid), data = .x))) %>% 
  pull(lmer_mods) %>% 
  purrr::set_names(c("Self-concept clarity", "Meaning in life", "Self-esteem", "Life satisfaction"))
6.8.6.2 Results: current personality

Just the domains for now (not the facets):

Show the code
# unlist
df_mlm_check_curr_unlist <- as.data.frame(summary(df_mlm_check_curr[[1]])$coefficients) %>% as_tibble()
for (i in 2:length(df_mlm_check_curr)) {
  df_mlm_check_curr_unlist <- bind_rows(df_mlm_check_curr_unlist, 
                                          as.data.frame(summary(df_mlm_check_curr[[i]])$coefficients) %>% as_tibble())
}

# label etc.
df_mlm_check_curr_unlist <- df_mlm_check_curr_unlist %>% # order by BFI traits
        mutate(outcome = rep(sort(names(b5_vars)), each=4), 
               term = c(rep(c("Intercept", "time (1 vs. 2)", 
                              "group (control vs. intv.)", "time*group"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% 
  select(outcome, term, est, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

# display -> only for domains for now
kable(df_mlm_check_curr_unlist[1:20, ] , 
      digits = 3)
outcome term est std_err p sig
extraversion Intercept 2.798 0.055 0.000 ***
extraversion time (1 vs. 2) 0.090 0.035 0.011 *
extraversion group (control vs. intv.) 0.012 0.061 0.841
extraversion time*group 0.028 0.040 0.485
agreeableness Intercept 3.606 0.045 0.000 ***
agreeableness time (1 vs. 2) 0.067 0.032 0.037 *
agreeableness group (control vs. intv.) 0.012 0.051 0.808
agreeableness time*group -0.002 0.036 0.959
conscientiousness Intercept 3.389 0.057 0.000 ***
conscientiousness time (1 vs. 2) 0.097 0.038 0.011 *
conscientiousness group (control vs. intv.) -0.004 0.064 0.948
conscientiousness time*group -0.008 0.043 0.852
neuroticism Intercept 3.333 0.065 0.000 ***
neuroticism time (1 vs. 2) -0.131 0.042 0.002 **
neuroticism group (control vs. intv.) -0.096 0.073 0.184
neuroticism time*group -0.044 0.047 0.352
openness Intercept 3.743 0.049 0.000 ***
openness time (1 vs. 2) 0.020 0.032 0.544
openness group (control vs. intv.) -0.051 0.055 0.353
openness time*group 0.059 0.036 0.101

These are unstandardized effect sizes, interpretable on the original scale.

Control group comes first: 0 = waitlist control group (N = 175), 1 = both intervention groups (N = 674)

6.8.6.3 Results: ideal personality

Just the domains for now (not the facets):

Show the code
# unlist
df_mlm_check_ideal_unlist <- as.data.frame(summary(df_mlm_check_ideal[[1]])$coefficients) %>% as_tibble()
for (i in 2:length(df_mlm_check_ideal)) {
  df_mlm_check_ideal_unlist <- bind_rows(df_mlm_check_ideal_unlist, 
                                          as.data.frame(summary(df_mlm_check_ideal[[i]])$coefficients) %>% as_tibble())
}

# label etc.
df_mlm_check_ideal_unlist <- df_mlm_check_ideal_unlist %>% # order by BFI traits
        mutate(outcome = rep(sort(names(b5_vars)), each=4), 
               term = c(rep(c("Intercept", "time (1 vs. 2)", 
                              "group (control vs. intv.)", "time*group"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% 
  select(outcome, term, est, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

# display -> only for domains for now
kable(df_mlm_check_ideal_unlist[1:20, ] , 
      digits = 3)
outcome term est std_err p sig
extraversion Intercept 3.919 0.038 0.000 ***
extraversion time (1 vs. 2) -0.021 0.034 0.533
extraversion group (control vs. intv.) -0.004 0.043 0.924
extraversion time*group 0.002 0.038 0.955
agreeableness Intercept 4.104 0.041 0.000 ***
agreeableness time (1 vs. 2) -0.011 0.034 0.743
agreeableness group (control vs. intv.) -0.035 0.046 0.446
agreeableness time*group 0.000 0.039 0.994
conscientiousness Intercept 4.418 0.038 0.000 ***
conscientiousness time (1 vs. 2) -0.038 0.033 0.251
conscientiousness group (control vs. intv.) -0.001 0.043 0.978
conscientiousness time*group 0.056 0.037 0.134
neuroticism Intercept 1.676 0.038 0.000 ***
neuroticism time (1 vs. 2) 0.024 0.035 0.498
neuroticism group (control vs. intv.) 0.012 0.043 0.782
neuroticism time*group -0.004 0.040 0.927
openness Intercept 4.154 0.043 0.000 ***
openness time (1 vs. 2) 0.018 0.035 0.600
openness group (control vs. intv.) -0.041 0.048 0.400
openness time*group 0.036 0.039 0.350

These are unstandardized effect sizes, interpretable on the original scale.

Control group comes first: 0 = waitlist control group (N = 175), 1 = both intervention groups (N = 674)

6.8.6.4 Results: well-being
Show the code
# unlist
df_mlm_check_wb_unlist <- as.data.frame(summary(df_mlm_check_wb[[1]])$coefficients) %>% as_tibble()
for (i in 2:length(df_mlm_check_wb)) {
  df_mlm_check_wb_unlist <- bind_rows(df_mlm_check_wb_unlist, 
                                          as.data.frame(summary(df_mlm_check_wb[[i]])$coefficients) %>% as_tibble())
}

# label etc.
df_mlm_check_wb_unlist <- df_mlm_check_wb_unlist %>% # order by BFI traits
        mutate(outcome = rep(c("Self-concept clarity", "Meaning in life", 
                               "Self-esteem", "Life satisfaction"), each=4), 
               term = c(rep(c("Intercept", "time (1 vs. 2)", 
                              "group (control vs. intv.)", "time*group"), 4))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% 
  select(outcome, term, est, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

# display -> only for domains for now
kable(df_mlm_check_wb_unlist, digits = 3)
outcome term est std_err p sig
Self-concept clarity Intercept 3.066 0.068 0.000 ***
Self-concept clarity time (1 vs. 2) 0.081 0.056 0.148
Self-concept clarity group (control vs. intv.) -0.093 0.076 0.221
Self-concept clarity time*group 0.140 0.062 0.025 *
Meaning in life Intercept 3.507 0.088 0.000 ***
Meaning in life time (1 vs. 2) 0.321 0.071 0.000 ***
Meaning in life group (control vs. intv.) 0.021 0.098 0.827
Meaning in life time*group -0.094 0.080 0.241
Self-esteem Intercept 3.223 0.066 0.000 ***
Self-esteem time (1 vs. 2) 0.206 0.048 0.000 ***
Self-esteem group (control vs. intv.) -0.027 0.074 0.712
Self-esteem time*group 0.084 0.054 0.117
Life satisfaction Intercept 2.683 0.076 0.000 ***
Life satisfaction time (1 vs. 2) 0.220 0.057 0.000 ***
Life satisfaction group (control vs. intv.) 0.048 0.085 0.572
Life satisfaction time*group 0.037 0.064 0.563

These are unstandardized effect sizes, interpretable on the original scale.

Control group comes first: 0 = waitlist control group (N = 175), 1 = both intervention groups (N = 674)

7 Exploratory findings

7.1 Differences across intervention groups (a)

Now confirmatory in Study 2.

7.2 Personal project dimensions (b)

We will explore b) whether the extent of change/acceptance is related to personal project dimension variables.

Not assessed, anymore, in study 2. Please see study 1 report for results.

7.3 Traits that were selected as change goals (c)

We will explore c) whether there are stronger rates of change/acceptance on traits that were selected as change goals (in the 5 free-form adjectives) than those that were not.

TBD!

7.4 Robustness check (d)

Does self-improvement intervene on current personality trait change (but not ideal personality)? Does self-acceptance intervene on ideal personality trait change (but not current personality)?

7.4.1 From T1 to T2

Changes in current personality traits over time:

Show the code
df_manip_check_curr <- df_sbsa2_t1t2 %>% 
  select(pid, time_d, rando, 
         paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_comb_curr")) %>% 
  pivot_longer(ends_with("_comb_curr"), 
               names_to = "test", names_prefix = "facet", values_to = "score", values_drop_na = TRUE) %>% 
  group_nest(test) %>% 
  mutate(lmer_mods = map(data, ~lmerTest::lmer(score ~ time_d * rando + (1 | pid), data = .x))) %>% 
  pull(lmer_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_manip_check_curr_unlist <- as.data.frame(summary(df_manip_check_curr[[1]])$coefficients) %>% as_tibble()
for (i in 2:length(df_manip_check_curr)) {
  df_manip_check_curr_unlist <- bind_rows(df_manip_check_curr_unlist, 
                                          as.data.frame(summary(df_manip_check_curr[[i]])$coefficients) %>% as_tibble())
}
kable(df_manip_check_curr_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=4), 
               term = c(rep(c("Intercept", "time", "group", "time*group"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars)))), # order by BFI traits, 
      digits = 3)
outcome term est std_err p sig
extraversion Intercept 2.845 0.039 0.000 ***
extraversion time 0.113 0.026 0.000 ***
extraversion group -0.069 0.054 0.203
extraversion time*group 0.009 0.036 0.800
agreeableness Intercept 3.633 0.032 0.000 ***
agreeableness time 0.048 0.023 0.038 *
agreeableness group -0.030 0.046 0.515
agreeableness time*group 0.033 0.033 0.316
conscientiousness Intercept 3.371 0.042 0.000 ***
conscientiousness time 0.075 0.027 0.006 **
conscientiousness group 0.026 0.059 0.653
conscientiousness time*group 0.026 0.038 0.490
neuroticism Intercept 3.220 0.046 0.000 ***
neuroticism time -0.172 0.030 0.000 ***
neuroticism group 0.033 0.065 0.611
neuroticism time*group -0.006 0.042 0.887
openness Intercept 3.707 0.035 0.000 ***
openness time 0.079 0.023 0.001 ***
openness group -0.029 0.050 0.555
openness time*group -0.001 0.032 0.977
sociability Intercept 2.485 0.054 0.000 ***
sociability time 0.168 0.037 0.000 ***
sociability group -0.040 0.076 0.600
sociability time*group -0.061 0.053 0.244
assertiveness Intercept 2.908 0.048 0.000 ***
assertiveness time 0.076 0.035 0.028 *
assertiveness group -0.078 0.068 0.250
assertiveness time*group 0.036 0.048 0.453
energy Intercept 3.140 0.046 0.000 ***
energy time 0.094 0.038 0.014 *
energy group -0.088 0.065 0.176
energy time*group 0.053 0.054 0.326
compassion Intercept 3.753 0.041 0.000 ***
compassion time 0.042 0.037 0.254
compassion group -0.056 0.057 0.326
compassion time*group 0.079 0.051 0.124
respectfulness Intercept 4.035 0.038 0.000 ***
respectfulness time 0.013 0.032 0.680
respectfulness group -0.014 0.054 0.804
respectfulness time*group -0.002 0.044 0.955
trust Intercept 3.110 0.045 0.000 ***
trust time 0.097 0.035 0.006 **
trust group -0.016 0.064 0.800
trust time*group 0.011 0.049 0.831
organization Intercept 3.445 0.052 0.000 ***
organization time 0.056 0.037 0.131
organization group 0.109 0.074 0.143
organization time*group 0.023 0.052 0.657
productiveness Intercept 3.148 0.049 0.000 ***
productiveness time 0.141 0.039 0.000 ***
productiveness group 0.043 0.069 0.538
productiveness time*group 0.001 0.054 0.978
responsibility Intercept 3.522 0.045 0.000 ***
responsibility time 0.035 0.036 0.333
responsibility group -0.068 0.064 0.284
responsibility time*group 0.052 0.051 0.311
anxiety Intercept 3.525 0.050 0.000 ***
anxiety time -0.147 0.037 0.000 ***
anxiety group 0.093 0.070 0.185
anxiety time*group -0.012 0.052 0.817
depression Intercept 3.144 0.054 0.000 ***
depression time -0.238 0.039 0.000 ***
depression group 0.004 0.076 0.954
depression time*group 0.031 0.055 0.572
volatility Intercept 2.993 0.054 0.000 ***
volatility time -0.127 0.042 0.002 **
volatility group 0.001 0.076 0.987
volatility time*group -0.045 0.058 0.441
curiosity Intercept 3.817 0.043 0.000 ***
curiosity time 0.052 0.032 0.106
curiosity group -0.014 0.060 0.817
curiosity time*group 0.006 0.045 0.899
aesthetic Intercept 3.661 0.047 0.000 ***
aesthetic time 0.047 0.036 0.192
aesthetic group -0.087 0.066 0.185
aesthetic time*group 0.036 0.050 0.474
imagination Intercept 3.642 0.045 0.000 ***
imagination time 0.141 0.035 0.000 ***
imagination group 0.014 0.063 0.824
imagination time*group -0.046 0.049 0.349

No significant group effects (higher trait level in self-improvement group at baseline) and also no significant differences in the changes over time in current-personality trait levels (timeXgroup). Significant (at p < .001) changes over time in current-personality trait levels (time) for 3 of the domains and five of the facets (independent of intervention group membership).

Changes in ideal personality traits over time:

Show the code
df_manip_check_ideal <- df_sbsa2_t1t2 %>% 
  select(pid, time_d, rando, 
         paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_comb_ideal")) %>% 
  pivot_longer(ends_with("_comb_ideal"), 
               names_to = "test", names_prefix = "facet", values_to = "score", values_drop_na = TRUE) %>% 
  group_nest(test) %>% 
  mutate(lmer_mods = map(data, ~lmerTest::lmer(score ~ time_d * rando + (1 | pid), data = .x))) %>% 
  pull(lmer_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_manip_check_ideal_unlist <- as.data.frame(summary(df_manip_check_ideal[[1]])$coefficients) %>% as_tibble()
for (i in 2:length(df_manip_check_ideal)) {
  df_manip_check_ideal_unlist <- bind_rows(df_manip_check_ideal_unlist, 
                                          as.data.frame(summary(df_manip_check_ideal[[i]])$coefficients) %>% as_tibble())
}
kable(df_manip_check_ideal_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=4), 
               term = c(rep(c("Intercept", "time", "group", "time*group"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars)))), # order by BFI traits, 
      digits = 3)
outcome term est std_err p sig
extraversion Intercept 3.919 0.027 0.000 ***
extraversion time -0.023 0.024 0.351
extraversion group -0.009 0.038 0.812
extraversion time*group 0.007 0.034 0.827
agreeableness Intercept 4.078 0.029 0.000 ***
agreeableness time 0.007 0.024 0.777
agreeableness group -0.018 0.041 0.670
agreeableness time*group -0.035 0.034 0.300
conscientiousness Intercept 4.414 0.027 0.000 ***
conscientiousness time 0.027 0.024 0.266
conscientiousness group 0.005 0.038 0.889
conscientiousness time*group -0.018 0.034 0.601
neuroticism Intercept 1.704 0.028 0.000 ***
neuroticism time 0.004 0.026 0.878
neuroticism group -0.032 0.039 0.413
neuroticism time*group 0.032 0.037 0.381
openness Intercept 4.140 0.031 0.000 ***
openness time 0.054 0.025 0.035 *
openness group -0.052 0.043 0.233
openness time*group 0.001 0.036 0.971
sociability Intercept 3.735 0.038 0.000 ***
sociability time -0.085 0.036 0.020 *
sociability group -0.029 0.054 0.583
sociability time*group 0.060 0.051 0.239
assertiveness Intercept 3.832 0.037 0.000 ***
assertiveness time 0.001 0.035 0.984
assertiveness group 0.001 0.052 0.981
assertiveness time*group 0.002 0.049 0.967
energy Intercept 4.189 0.034 0.000 ***
energy time 0.016 0.038 0.672
energy group 0.003 0.048 0.953
energy time*group -0.047 0.053 0.384
compassion Intercept 4.029 0.038 0.000 ***
compassion time 0.016 0.037 0.675
compassion group -0.019 0.053 0.721
compassion time*group -0.008 0.052 0.885
respectfulness Intercept 4.454 0.032 0.000 ***
respectfulness time -0.001 0.029 0.963
respectfulness group -0.031 0.045 0.492
respectfulness time*group -0.007 0.041 0.862
trust Intercept 3.751 0.040 0.000 ***
trust time 0.013 0.036 0.728
trust group -0.002 0.056 0.965
trust time*group -0.099 0.051 0.053
organization Intercept 4.426 0.032 0.000 ***
organization time 0.006 0.034 0.849
organization group 0.001 0.045 0.982
organization time*group 0.031 0.048 0.511
productiveness Intercept 4.513 0.030 0.000 ***
productiveness time 0.045 0.030 0.137
productiveness group 0.055 0.042 0.197
productiveness time*group -0.052 0.042 0.215
responsibility Intercept 4.300 0.035 0.000 ***
responsibility time 0.035 0.033 0.288
responsibility group -0.031 0.049 0.523
responsibility time*group -0.027 0.046 0.562
anxiety Intercept 1.876 0.035 0.000 ***
anxiety time 0.030 0.039 0.445
anxiety group -0.036 0.050 0.466
anxiety time*group 0.004 0.055 0.947
depression Intercept 1.499 0.030 0.000 ***
depression time -0.003 0.031 0.911
depression group -0.022 0.042 0.597
depression time*group 0.040 0.043 0.356
volatility Intercept 1.736 0.035 0.000 ***
volatility time -0.018 0.036 0.611
volatility group -0.041 0.049 0.409
volatility time*group 0.066 0.050 0.188
curiosity Intercept 4.129 0.038 0.000 ***
curiosity time 0.028 0.038 0.455
curiosity group -0.046 0.054 0.396
curiosity time*group 0.002 0.053 0.965
aesthetic Intercept 3.922 0.039 0.000 ***
aesthetic time 0.108 0.037 0.004 **
aesthetic group -0.082 0.056 0.142
aesthetic time*group -0.050 0.052 0.334
imagination Intercept 4.369 0.036 0.000 ***
imagination time 0.024 0.036 0.506
imagination group -0.010 0.051 0.842
imagination time*group 0.028 0.051 0.585

No significant group effects (higher trait level in self-improvement group at baseline) and also no significant differences in the changes over time in ideal-personality trait levels (timeXgroup). No significant changes over time in ideal-personality trait levels (time; independent of intervention group membership).

7.4.2 From T2 to T3

Changes in current personality traits over time:

Show the code
df_sbsa2_t2t3 <- df_sbsa2 %>% filter(rando!="Waitlist-Control" & time %in% c(2,3)) %>% mutate(time_d = time - 2)

df_manip_check_curr_fu <- df_sbsa2_t2t3 %>% 
  select(pid, time_d, rando, 
         paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_comb_curr")) %>% 
  pivot_longer(ends_with("_comb_curr"), 
               names_to = "test", names_prefix = "facet", values_to = "score", values_drop_na = TRUE) %>% 
  group_nest(test) %>% 
  mutate(lmer_mods = map(data, ~lmerTest::lmer(score ~ time_d * rando + (1 | pid), data = .x))) %>% 
  pull(lmer_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_manip_check_curr_fu_unlist <- as.data.frame(summary(df_manip_check_curr_fu[[1]])$coefficients) %>% as_tibble()
for (i in 2:length(df_manip_check_curr_fu)) {
  df_manip_check_curr_fu_unlist <- bind_rows(df_manip_check_curr_fu_unlist, 
                                          as.data.frame(summary(df_manip_check_curr_fu[[i]])$coefficients) %>% as_tibble())
}
kable(df_manip_check_curr_fu_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=4), 
               term = c(rep(c("Intercept", "time", "group", "time*group"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars)))), # order by BFI traits, 
      digits = 3)
outcome term est std_err p sig
extraversion Intercept 2.951 0.041 0.000 ***
extraversion time 0.032 0.025 0.217
extraversion group -0.050 0.058 0.389
extraversion time*group -0.017 0.036 0.625
agreeableness Intercept 3.697 0.035 0.000 ***
agreeableness time 0.015 0.022 0.486
agreeableness group -0.011 0.050 0.822
agreeableness time*group -0.019 0.031 0.531
conscientiousness Intercept 3.468 0.045 0.000 ***
conscientiousness time 0.072 0.028 0.009 **
conscientiousness group 0.067 0.064 0.296
conscientiousness time*group -0.060 0.039 0.121
neuroticism Intercept 3.068 0.049 0.000 ***
neuroticism time -0.062 0.028 0.030 *
neuroticism group -0.015 0.069 0.829
neuroticism time*group 0.017 0.040 0.674
openness Intercept 3.792 0.039 0.000 ***
openness time -0.001 0.022 0.969
openness group -0.038 0.054 0.484
openness time*group 0.016 0.031 0.619
sociability Intercept 2.641 0.057 0.000 ***
sociability time 0.046 0.036 0.202
sociability group -0.092 0.080 0.254
sociability time*group 0.006 0.050 0.902
assertiveness Intercept 2.984 0.051 0.000 ***
assertiveness time 0.039 0.036 0.281
assertiveness group -0.050 0.072 0.484
assertiveness time*group -0.023 0.050 0.648
energy Intercept 3.228 0.048 0.000 ***
energy time 0.011 0.040 0.781
energy group -0.008 0.068 0.905
energy time*group -0.034 0.056 0.535
compassion Intercept 3.814 0.044 0.000 ***
compassion time 0.040 0.037 0.277
compassion group 0.000 0.062 1.000
compassion time*group -0.053 0.052 0.301
respectfulness Intercept 4.067 0.041 0.000 ***
respectfulness time 0.025 0.029 0.394
respectfulness group -0.017 0.058 0.772
respectfulness time*group -0.011 0.041 0.791
trust Intercept 3.211 0.048 0.000 ***
trust time -0.018 0.035 0.603
trust group -0.019 0.068 0.780
trust time*group 0.010 0.048 0.834
organization Intercept 3.520 0.056 0.000 ***
organization time 0.077 0.037 0.038 *
organization group 0.153 0.079 0.053
organization time*group -0.027 0.052 0.607
productiveness Intercept 3.297 0.054 0.000 ***
productiveness time 0.077 0.037 0.039 *
productiveness group 0.064 0.076 0.402
productiveness time*group -0.091 0.052 0.080
responsibility Intercept 3.586 0.049 0.000 ***
responsibility time 0.064 0.040 0.113
responsibility group -0.018 0.068 0.797
responsibility time*group -0.060 0.056 0.289
anxiety Intercept 3.396 0.053 0.000 ***
anxiety time -0.035 0.038 0.355
anxiety group 0.047 0.075 0.534
anxiety time*group -0.036 0.053 0.498
depression Intercept 2.922 0.058 0.000 ***
depression time -0.076 0.039 0.052
depression group -0.013 0.081 0.876
depression time*group 0.004 0.054 0.941
volatility Intercept 2.886 0.056 0.000 ***
volatility time -0.070 0.038 0.069
volatility group -0.078 0.078 0.322
volatility time*group 0.072 0.054 0.181
curiosity Intercept 3.865 0.046 0.000 ***
curiosity time 0.029 0.033 0.374
curiosity group -0.015 0.064 0.811
curiosity time*group -0.048 0.046 0.300
aesthetic Intercept 3.724 0.051 0.000 ***
aesthetic time -0.025 0.035 0.486
aesthetic group -0.060 0.072 0.401
aesthetic time*group 0.031 0.050 0.534
imagination Intercept 3.786 0.047 0.000 ***
imagination time -0.007 0.034 0.834
imagination group -0.037 0.065 0.575
imagination time*group 0.065 0.048 0.177

No further changes from T2 to T3 that are significant at p < .001 (independent of intervention group membership). Suggestive increase in conscientiousness.

Changes in ideal personality traits over time:

Show the code
df_manip_check_ideal_fu <- df_sbsa2_t2t3 %>% 
  select(pid, time_d, rando, 
         paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_comb_ideal")) %>% 
  pivot_longer(ends_with("_comb_ideal"), 
               names_to = "test", names_prefix = "facet", values_to = "score", values_drop_na = TRUE) %>% 
  group_nest(test) %>% 
  mutate(lmer_mods = map(data, ~lmerTest::lmer(score ~ time_d * rando + (1 | pid), data = .x))) %>% 
  pull(lmer_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_manip_check_ideal_fu_unlist <- as.data.frame(summary(df_manip_check_ideal_fu[[1]])$coefficients) %>% as_tibble()
for (i in 2:length(df_manip_check_ideal_fu)) {
  df_manip_check_ideal_fu_unlist <- bind_rows(df_manip_check_ideal_fu_unlist, 
                                          as.data.frame(summary(df_manip_check_ideal_fu[[i]])$coefficients) %>% as_tibble())
}
kable(df_manip_check_ideal_fu_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=4), 
               term = c(rep(c("Intercept", "time", "group", "time*group"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars)))), # order by BFI traits, 
      digits = 3)
outcome term est std_err p sig
extraversion Intercept 3.897 0.029 0.000 ***
extraversion time -0.006 0.024 0.808
extraversion group 0.000 0.041 0.997
extraversion time*group -0.016 0.034 0.649
agreeableness Intercept 4.099 0.032 0.000 ***
agreeableness time 0.003 0.024 0.891
agreeableness group -0.072 0.045 0.108
agreeableness time*group 0.033 0.033 0.327
conscientiousness Intercept 4.448 0.030 0.000 ***
conscientiousness time -0.007 0.023 0.761
conscientiousness group -0.022 0.042 0.605
conscientiousness time*group 0.006 0.032 0.848
neuroticism Intercept 1.700 0.029 0.000 ***
neuroticism time 0.010 0.025 0.675
neuroticism group 0.012 0.041 0.769
neuroticism time*group -0.011 0.035 0.760
openness Intercept 4.192 0.033 0.000 ***
openness time 0.004 0.026 0.864
openness group -0.054 0.047 0.250
openness time*group 0.006 0.037 0.866
sociability Intercept 3.661 0.042 0.000 ***
sociability time 0.003 0.036 0.923
sociability group 0.029 0.059 0.615
sociability time*group -0.054 0.050 0.284
assertiveness Intercept 3.826 0.040 0.000 ***
assertiveness time -0.021 0.039 0.580
assertiveness group 0.010 0.057 0.863
assertiveness time*group -0.024 0.054 0.655
energy Intercept 4.203 0.037 0.000 ***
energy time 0.004 0.040 0.927
energy group -0.044 0.052 0.397
energy time*group 0.034 0.056 0.541
compassion Intercept 4.070 0.041 0.000 ***
compassion time 0.035 0.038 0.354
compassion group -0.057 0.058 0.327
compassion time*group 0.019 0.053 0.726
respectfulness Intercept 4.454 0.035 0.000 ***
respectfulness time -0.005 0.029 0.865
respectfulness group -0.044 0.049 0.372
respectfulness time*group 0.027 0.041 0.518
trust Intercept 3.774 0.043 0.000 ***
trust time -0.021 0.037 0.568
trust group -0.112 0.061 0.066
trust time*group 0.054 0.052 0.296
organization Intercept 4.434 0.034 0.000 ***
organization time 0.037 0.034 0.281
organization group 0.038 0.048 0.428
organization time*group -0.028 0.048 0.557
productiveness Intercept 4.564 0.033 0.000 ***
productiveness time -0.049 0.032 0.121
productiveness group -0.008 0.046 0.865
productiveness time*group 0.015 0.044 0.732
responsibility Intercept 4.346 0.038 0.000 ***
responsibility time 0.001 0.034 0.984
responsibility group -0.076 0.053 0.154
responsibility time*group 0.024 0.048 0.614
anxiety Intercept 1.901 0.038 0.000 ***
anxiety time -0.002 0.039 0.953
anxiety group -0.020 0.053 0.704
anxiety time*group 0.053 0.055 0.336
depression Intercept 1.490 0.032 0.000 ***
depression time -0.029 0.031 0.350
depression group 0.021 0.044 0.637
depression time*group 0.003 0.043 0.949
volatility Intercept 1.708 0.038 0.000 ***
volatility time 0.061 0.035 0.085
volatility group 0.036 0.053 0.499
volatility time*group -0.092 0.050 0.065
curiosity Intercept 4.157 0.042 0.000 ***
curiosity time -0.008 0.039 0.847
curiosity group -0.052 0.059 0.378
curiosity time*group -0.033 0.055 0.548
aesthetic Intercept 4.034 0.044 0.000 ***
aesthetic time -0.011 0.037 0.776
aesthetic group -0.135 0.061 0.028 *
aesthetic time*group 0.080 0.052 0.125
imagination Intercept 4.385 0.038 0.000 ***
imagination time 0.037 0.036 0.315
imagination group 0.022 0.053 0.682
imagination time*group -0.029 0.051 0.575

No further changes from T2 to T3 that are significant at p < .001 (independent of intervention group membership). No group differences.

7.4.3 Descriptive plots: mean-level changes

7.4.3.1 Personality

Prepare data frame for plotting:

Show the code
df_manip_check_forplot <- df_sbsa2 %>% 
  select(pid, time, rando, contains("_comb_"), -c(na_comb_curr, na_comb_ideal)) %>% 
  pivot_longer(-c(pid, time, rando), 
               cols_vary = "slowest",
               names_to = c("trait", "reference"),
               names_pattern = "(.*)_(.*)",
               values_to = "score") %>% 
  mutate(trait = gsub("_comb", "", trait),
         reference = ifelse(reference=="curr", "current", reference)) %>% 
  left_join(tibble(long = str_to_title(names(b5_vars)), trait = str_trunc(names(b5_vars), 5, ellipsis = ""))) %>% 
  select(-trait, trait = long) %>% 
  filter(!is.na(score)) %>% 
  group_by(trait, reference, rando, time) %>% 
  summarise(n = n(), m_trait = mean(score), sd_trait = sd(score)) %>% 
  ungroup() %>% 
  mutate(Group = factor(rando, 
                        levels = c("Self-Improvement", "Self-Acceptance", "Waitlist-Control"), 
                        labels = c("Self-Improvement", "Self-Acceptance", "Waitlist-Control")),
         Time = factor(time),
         Trait = factor(trait, 
                        levels = str_to_title(names(b5_vars))[c(1,6:8, 2,9:11, 3,12:14, 4,15:17, 5,18:20)], # group facets with each trait
                        labels = str_to_title(names(b5_vars))[c(1,6:8, 2,9:11, 3,12:14, 4,15:17, 5,18:20)]),
         Reference = factor(reference, levels = c("current", "ideal"), labels = c("Current Personality", "Ideal Personality")),
         lwr95 = m_trait - qnorm(0.975)*sd_trait/sqrt(n),
         upr95 = m_trait + qnorm(0.975)*sd_trait/sqrt(n)) %>% 
  select(-c(time, rando, trait, reference))

Table of all outcomes:

Show the code
df_manip_check_forplot %>% arrange(Trait, Reference, Group, Time) %>% 
  mutate_if(is.numeric, round, digits=2) %>% 
  select(Trait, Reference, Group, Time, n, m_trait, lwr95, upr95, sd_trait) %>% 
  kable(digits = 2)
Trait Reference Group Time n m_trait lwr95 upr95 sd_trait
Extraversion Current Personality Self-Improvement 1 338 2.78 2.70 2.85 0.71
Extraversion Current Personality Self-Improvement 2 293 2.90 2.82 2.97 0.67
Extraversion Current Personality Self-Improvement 3 262 2.92 2.84 3.00 0.67
Extraversion Current Personality Self-Acceptance 1 336 2.84 2.77 2.92 0.73
Extraversion Current Personality Self-Acceptance 2 284 2.95 2.87 3.03 0.71
Extraversion Current Personality Self-Acceptance 3 252 2.98 2.89 3.07 0.71
Extraversion Current Personality Waitlist-Control 1 174 2.80 2.68 2.91 0.78
Extraversion Current Personality Waitlist-Control 2 147 2.89 2.77 3.02 0.76
Extraversion Current Personality Waitlist-Control 3 125 2.92 2.78 3.07 0.82
Extraversion Ideal Personality Self-Improvement 1 338 3.91 3.86 3.96 0.49
Extraversion Ideal Personality Self-Improvement 2 293 3.90 3.84 3.96 0.51
Extraversion Ideal Personality Self-Improvement 3 262 3.88 3.82 3.94 0.51
Extraversion Ideal Personality Self-Acceptance 1 336 3.92 3.87 3.97 0.48
Extraversion Ideal Personality Self-Acceptance 2 284 3.90 3.84 3.95 0.48
Extraversion Ideal Personality Self-Acceptance 3 252 3.89 3.83 3.95 0.47
Extraversion Ideal Personality Waitlist-Control 1 174 3.92 3.84 4.00 0.54
Extraversion Ideal Personality Waitlist-Control 2 147 3.89 3.80 3.97 0.53
Extraversion Ideal Personality Waitlist-Control 3 125 3.84 3.74 3.94 0.55
Sociability Current Personality Self-Improvement 1 338 2.45 2.34 2.55 0.98
Sociability Current Personality Self-Improvement 2 293 2.54 2.44 2.65 0.93
Sociability Current Personality Self-Improvement 3 262 2.60 2.49 2.72 0.95
Sociability Current Personality Self-Acceptance 1 336 2.49 2.37 2.60 1.05
Sociability Current Personality Self-Acceptance 2 284 2.64 2.53 2.76 0.99
Sociability Current Personality Self-Acceptance 3 252 2.67 2.54 2.79 1.00
Sociability Current Personality Waitlist-Control 1 174 2.54 2.38 2.70 1.06
Sociability Current Personality Waitlist-Control 2 147 2.56 2.39 2.72 1.02
Sociability Current Personality Waitlist-Control 3 125 2.66 2.48 2.85 1.06
Sociability Ideal Personality Self-Improvement 1 338 3.71 3.63 3.78 0.71
Sociability Ideal Personality Self-Improvement 2 292 3.69 3.61 3.77 0.70
Sociability Ideal Personality Self-Improvement 3 262 3.65 3.56 3.74 0.73
Sociability Ideal Personality Self-Acceptance 1 335 3.74 3.66 3.81 0.66
Sociability Ideal Personality Self-Acceptance 2 284 3.66 3.58 3.74 0.71
Sociability Ideal Personality Self-Acceptance 3 252 3.66 3.57 3.74 0.69
Sociability Ideal Personality Waitlist-Control 1 174 3.74 3.62 3.85 0.76
Sociability Ideal Personality Waitlist-Control 2 147 3.58 3.46 3.71 0.79
Sociability Ideal Personality Waitlist-Control 3 125 3.59 3.46 3.73 0.78
Assertiveness Current Personality Self-Improvement 1 338 2.83 2.73 2.93 0.91
Assertiveness Current Personality Self-Improvement 2 293 2.93 2.83 3.03 0.84
Assertiveness Current Personality Self-Improvement 3 262 2.96 2.85 3.06 0.85
Assertiveness Current Personality Self-Acceptance 1 336 2.91 2.81 3.00 0.88
Assertiveness Current Personality Self-Acceptance 2 284 2.98 2.88 3.09 0.87
Assertiveness Current Personality Self-Acceptance 3 252 3.03 2.92 3.14 0.90
Assertiveness Current Personality Waitlist-Control 1 174 2.84 2.70 2.97 0.90
Assertiveness Current Personality Waitlist-Control 2 147 2.94 2.80 3.08 0.88
Assertiveness Current Personality Waitlist-Control 3 125 2.92 2.76 3.08 0.90
Assertiveness Ideal Personality Self-Improvement 1 337 3.83 3.76 3.90 0.68
Assertiveness Ideal Personality Self-Improvement 2 292 3.84 3.76 3.91 0.67
Assertiveness Ideal Personality Self-Improvement 3 262 3.79 3.70 3.87 0.70
Assertiveness Ideal Personality Self-Acceptance 1 335 3.83 3.76 3.90 0.66
Assertiveness Ideal Personality Self-Acceptance 2 284 3.83 3.75 3.90 0.68
Assertiveness Ideal Personality Self-Acceptance 3 252 3.81 3.73 3.89 0.66
Assertiveness Ideal Personality Waitlist-Control 1 174 3.83 3.73 3.94 0.70
Assertiveness Ideal Personality Waitlist-Control 2 147 3.81 3.71 3.92 0.66
Assertiveness Ideal Personality Waitlist-Control 3 125 3.73 3.61 3.85 0.67
Energy Current Personality Self-Improvement 1 338 3.05 2.96 3.14 0.85
Energy Current Personality Self-Improvement 2 293 3.22 3.12 3.31 0.82
Energy Current Personality Self-Improvement 3 262 3.20 3.10 3.29 0.79
Energy Current Personality Self-Acceptance 1 336 3.14 3.05 3.23 0.85
Energy Current Personality Self-Acceptance 2 284 3.23 3.13 3.32 0.83
Energy Current Personality Self-Acceptance 3 252 3.24 3.14 3.34 0.81
Energy Current Personality Waitlist-Control 1 174 3.01 2.87 3.14 0.92
Energy Current Personality Waitlist-Control 2 147 3.19 3.04 3.34 0.93
Energy Current Personality Waitlist-Control 3 125 3.19 3.01 3.36 1.00
Energy Ideal Personality Self-Improvement 1 338 4.19 4.13 4.26 0.62
Energy Ideal Personality Self-Improvement 2 292 4.16 4.09 4.23 0.64
Energy Ideal Personality Self-Improvement 3 262 4.21 4.13 4.28 0.61
Energy Ideal Personality Self-Acceptance 1 336 4.19 4.12 4.26 0.63
Energy Ideal Personality Self-Acceptance 2 284 4.20 4.13 4.27 0.60
Energy Ideal Personality Self-Acceptance 3 252 4.21 4.13 4.29 0.62
Energy Ideal Personality Waitlist-Control 1 174 4.19 4.09 4.29 0.66
Energy Ideal Personality Waitlist-Control 2 147 4.27 4.17 4.37 0.62
Energy Ideal Personality Waitlist-Control 3 125 4.19 4.08 4.31 0.67
Agreeableness Current Personality Self-Improvement 1 338 3.60 3.54 3.67 0.60
Agreeableness Current Personality Self-Improvement 2 293 3.68 3.62 3.74 0.56
Agreeableness Current Personality Self-Improvement 3 262 3.69 3.62 3.77 0.60
Agreeableness Current Personality Self-Acceptance 1 336 3.63 3.57 3.70 0.60
Agreeableness Current Personality Self-Acceptance 2 284 3.70 3.63 3.77 0.61
Agreeableness Current Personality Self-Acceptance 3 252 3.71 3.64 3.79 0.61
Agreeableness Current Personality Waitlist-Control 1 174 3.60 3.51 3.70 0.63
Agreeableness Current Personality Waitlist-Control 2 147 3.68 3.58 3.77 0.60
Agreeableness Current Personality Waitlist-Control 3 125 3.76 3.65 3.86 0.59
Agreeableness Ideal Personality Self-Improvement 1 337 4.06 4.00 4.12 0.53
Agreeableness Ideal Personality Self-Improvement 2 293 4.02 3.96 4.08 0.52
Agreeableness Ideal Personality Self-Improvement 3 262 4.07 4.00 4.13 0.55
Agreeableness Ideal Personality Self-Acceptance 1 336 4.08 4.02 4.14 0.55
Agreeableness Ideal Personality Self-Acceptance 2 284 4.10 4.04 4.16 0.54
Agreeableness Ideal Personality Self-Acceptance 3 252 4.10 4.04 4.17 0.53
Agreeableness Ideal Personality Waitlist-Control 1 174 4.11 4.02 4.19 0.59
Agreeableness Ideal Personality Waitlist-Control 2 147 4.09 4.00 4.18 0.56
Agreeableness Ideal Personality Waitlist-Control 3 125 4.09 3.98 4.20 0.63
Compassion Current Personality Self-Improvement 1 338 3.70 3.62 3.78 0.75
Compassion Current Personality Self-Improvement 2 293 3.81 3.73 3.89 0.71
Compassion Current Personality Self-Improvement 3 262 3.80 3.71 3.89 0.73
Compassion Current Personality Self-Acceptance 1 336 3.75 3.67 3.83 0.74
Compassion Current Personality Self-Acceptance 2 284 3.81 3.72 3.91 0.78
Compassion Current Personality Self-Acceptance 3 252 3.87 3.77 3.96 0.76
Compassion Current Personality Waitlist-Control 1 174 3.80 3.69 3.91 0.76
Compassion Current Personality Waitlist-Control 2 147 3.88 3.76 3.99 0.71
Compassion Current Personality Waitlist-Control 3 125 3.94 3.82 4.07 0.71
Compassion Ideal Personality Self-Improvement 1 337 4.01 3.94 4.08 0.68
Compassion Ideal Personality Self-Improvement 2 293 4.01 3.93 4.09 0.68
Compassion Ideal Personality Self-Improvement 3 262 4.06 3.97 4.14 0.72
Compassion Ideal Personality Self-Acceptance 1 336 4.03 3.95 4.10 0.71
Compassion Ideal Personality Self-Acceptance 2 284 4.07 3.99 4.15 0.70
Compassion Ideal Personality Self-Acceptance 3 252 4.11 4.02 4.19 0.70
Compassion Ideal Personality Waitlist-Control 1 174 4.08 3.96 4.19 0.77
Compassion Ideal Personality Waitlist-Control 2 147 4.09 3.97 4.20 0.71
Compassion Ideal Personality Waitlist-Control 3 125 4.11 3.97 4.25 0.77
Respectfulness Current Personality Self-Improvement 1 338 4.02 3.94 4.10 0.74
Respectfulness Current Personality Self-Improvement 2 293 4.05 3.97 4.12 0.67
Respectfulness Current Personality Self-Improvement 3 262 4.09 4.00 4.17 0.70
Respectfulness Current Personality Self-Acceptance 1 336 4.03 3.96 4.11 0.70
Respectfulness Current Personality Self-Acceptance 2 284 4.07 3.99 4.15 0.70
Respectfulness Current Personality Self-Acceptance 3 252 4.09 4.01 4.18 0.70
Respectfulness Current Personality Waitlist-Control 1 174 4.00 3.89 4.11 0.74
Respectfulness Current Personality Waitlist-Control 2 147 4.07 3.95 4.18 0.71
Respectfulness Current Personality Waitlist-Control 3 125 4.12 3.99 4.25 0.74
Respectfulness Ideal Personality Self-Improvement 1 337 4.42 4.36 4.49 0.60
Respectfulness Ideal Personality Self-Improvement 2 291 4.41 4.34 4.47 0.57
Respectfulness Ideal Personality Self-Improvement 3 262 4.44 4.37 4.51 0.60
Respectfulness Ideal Personality Self-Acceptance 1 335 4.46 4.39 4.52 0.59
Respectfulness Ideal Personality Self-Acceptance 2 284 4.45 4.38 4.52 0.59
Respectfulness Ideal Personality Self-Acceptance 3 252 4.45 4.38 4.52 0.58
Respectfulness Ideal Personality Waitlist-Control 1 174 4.45 4.37 4.54 0.58
Respectfulness Ideal Personality Waitlist-Control 2 147 4.45 4.35 4.54 0.56
Respectfulness Ideal Personality Waitlist-Control 3 125 4.45 4.34 4.56 0.62
Trust Current Personality Self-Improvement 1 338 3.09 3.00 3.18 0.84
Trust Current Personality Self-Improvement 2 293 3.19 3.09 3.28 0.80
Trust Current Personality Self-Improvement 3 262 3.19 3.09 3.29 0.82
Trust Current Personality Self-Acceptance 1 336 3.11 3.02 3.20 0.85
Trust Current Personality Self-Acceptance 2 284 3.21 3.11 3.31 0.83
Trust Current Personality Self-Acceptance 3 252 3.18 3.08 3.28 0.81
Trust Current Personality Waitlist-Control 1 174 3.01 2.88 3.13 0.85
Trust Current Personality Waitlist-Control 2 147 3.09 2.95 3.23 0.84
Trust Current Personality Waitlist-Control 3 125 3.21 3.07 3.36 0.84
Trust Ideal Personality Self-Improvement 1 336 3.75 3.67 3.82 0.70
Trust Ideal Personality Self-Improvement 2 293 3.66 3.57 3.74 0.75
Trust Ideal Personality Self-Improvement 3 262 3.70 3.61 3.80 0.76
Trust Ideal Personality Self-Acceptance 1 336 3.75 3.67 3.83 0.74
Trust Ideal Personality Self-Acceptance 2 284 3.77 3.69 3.85 0.69
Trust Ideal Personality Self-Acceptance 3 252 3.75 3.66 3.83 0.71
Trust Ideal Personality Waitlist-Control 1 174 3.79 3.67 3.90 0.77
Trust Ideal Personality Waitlist-Control 2 147 3.74 3.62 3.87 0.77
Trust Ideal Personality Waitlist-Control 3 125 3.72 3.58 3.86 0.80
Conscientiousness Current Personality Self-Improvement 1 338 3.40 3.31 3.48 0.78
Conscientiousness Current Personality Self-Improvement 2 293 3.53 3.44 3.62 0.78
Conscientiousness Current Personality Self-Improvement 3 262 3.56 3.47 3.66 0.75
Conscientiousness Current Personality Self-Acceptance 1 336 3.37 3.29 3.45 0.74
Conscientiousness Current Personality Self-Acceptance 2 284 3.47 3.38 3.56 0.75
Conscientiousness Current Personality Self-Acceptance 3 252 3.55 3.45 3.65 0.79
Conscientiousness Current Personality Waitlist-Control 1 174 3.39 3.28 3.50 0.73
Conscientiousness Current Personality Waitlist-Control 2 147 3.50 3.37 3.62 0.77
Conscientiousness Current Personality Waitlist-Control 3 125 3.59 3.45 3.73 0.78
Conscientiousness Ideal Personality Self-Improvement 1 338 4.42 4.37 4.47 0.48
Conscientiousness Ideal Personality Self-Improvement 2 293 4.42 4.36 4.49 0.53
Conscientiousness Ideal Personality Self-Improvement 3 262 4.44 4.38 4.50 0.48
Conscientiousness Ideal Personality Self-Acceptance 1 336 4.41 4.36 4.47 0.50
Conscientiousness Ideal Personality Self-Acceptance 2 284 4.45 4.39 4.51 0.49
Conscientiousness Ideal Personality Self-Acceptance 3 252 4.45 4.39 4.52 0.50
Conscientiousness Ideal Personality Waitlist-Control 1 174 4.42 4.35 4.50 0.51
Conscientiousness Ideal Personality Waitlist-Control 2 147 4.39 4.30 4.47 0.53
Conscientiousness Ideal Personality Waitlist-Control 3 125 4.42 4.33 4.52 0.55
Organization Current Personality Self-Improvement 1 338 3.55 3.45 3.66 0.98
Organization Current Personality Self-Improvement 2 293 3.67 3.56 3.78 0.95
Organization Current Personality Self-Improvement 3 262 3.74 3.63 3.85 0.93
Organization Current Personality Self-Acceptance 1 336 3.44 3.34 3.55 0.95
Organization Current Personality Self-Acceptance 2 284 3.52 3.41 3.63 0.95
Organization Current Personality Self-Acceptance 3 252 3.61 3.50 3.73 0.96
Organization Current Personality Waitlist-Control 1 174 3.50 3.35 3.65 1.01
Organization Current Personality Waitlist-Control 2 147 3.59 3.43 3.75 0.99
Organization Current Personality Waitlist-Control 3 125 3.77 3.60 3.94 0.97
Organization Ideal Personality Self-Improvement 1 337 4.43 4.36 4.49 0.58
Organization Ideal Personality Self-Improvement 2 293 4.47 4.40 4.54 0.58
Organization Ideal Personality Self-Improvement 3 262 4.49 4.43 4.56 0.56
Organization Ideal Personality Self-Acceptance 1 336 4.43 4.36 4.49 0.58
Organization Ideal Personality Self-Acceptance 2 284 4.43 4.37 4.50 0.59
Organization Ideal Personality Self-Acceptance 3 252 4.48 4.41 4.55 0.56
Organization Ideal Personality Waitlist-Control 1 174 4.44 4.36 4.52 0.56
Organization Ideal Personality Waitlist-Control 2 147 4.40 4.30 4.50 0.60
Organization Ideal Personality Waitlist-Control 3 125 4.45 4.34 4.56 0.65
Productiveness Current Personality Self-Improvement 1 338 3.19 3.09 3.29 0.93
Productiveness Current Personality Self-Improvement 2 293 3.36 3.25 3.46 0.92
Productiveness Current Personality Self-Improvement 3 262 3.38 3.27 3.49 0.91
Productiveness Current Personality Self-Acceptance 1 336 3.15 3.06 3.24 0.87
Productiveness Current Personality Self-Acceptance 2 284 3.30 3.19 3.40 0.89
Productiveness Current Personality Self-Acceptance 3 252 3.37 3.26 3.49 0.93
Productiveness Current Personality Waitlist-Control 1 174 3.16 3.03 3.30 0.90
Productiveness Current Personality Waitlist-Control 2 147 3.30 3.15 3.44 0.89
Productiveness Current Personality Waitlist-Control 3 125 3.33 3.17 3.49 0.91
Productiveness Ideal Personality Self-Improvement 1 336 4.57 4.51 4.62 0.53
Productiveness Ideal Personality Self-Improvement 2 292 4.56 4.49 4.62 0.56
Productiveness Ideal Personality Self-Improvement 3 262 4.53 4.46 4.60 0.56
Productiveness Ideal Personality Self-Acceptance 1 335 4.51 4.45 4.57 0.57
Productiveness Ideal Personality Self-Acceptance 2 284 4.56 4.50 4.63 0.53
Productiveness Ideal Personality Self-Acceptance 3 252 4.53 4.46 4.60 0.54
Productiveness Ideal Personality Waitlist-Control 1 174 4.56 4.48 4.65 0.57
Productiveness Ideal Personality Waitlist-Control 2 147 4.52 4.42 4.62 0.60
Productiveness Ideal Personality Waitlist-Control 3 125 4.56 4.46 4.66 0.55
Responsibility Current Personality Self-Improvement 1 338 3.45 3.36 3.54 0.86
Responsibility Current Personality Self-Improvement 2 293 3.56 3.47 3.66 0.83
Responsibility Current Personality Self-Improvement 3 262 3.58 3.47 3.68 0.83
Responsibility Current Personality Self-Acceptance 1 336 3.52 3.44 3.61 0.81
Responsibility Current Personality Self-Acceptance 2 284 3.59 3.49 3.68 0.80
Responsibility Current Personality Self-Acceptance 3 252 3.66 3.56 3.76 0.82
Responsibility Current Personality Waitlist-Control 1 174 3.51 3.39 3.63 0.83
Responsibility Current Personality Waitlist-Control 2 147 3.60 3.47 3.73 0.80
Responsibility Current Personality Waitlist-Control 3 125 3.66 3.51 3.81 0.86
Responsibility Ideal Personality Self-Improvement 1 338 4.27 4.20 4.34 0.67
Responsibility Ideal Personality Self-Improvement 2 291 4.27 4.19 4.34 0.64
Responsibility Ideal Personality Self-Improvement 3 262 4.29 4.21 4.37 0.65
Responsibility Ideal Personality Self-Acceptance 1 335 4.30 4.24 4.37 0.60
Responsibility Ideal Personality Self-Acceptance 2 284 4.35 4.27 4.42 0.63
Responsibility Ideal Personality Self-Acceptance 3 252 4.35 4.27 4.43 0.62
Responsibility Ideal Personality Waitlist-Control 1 174 4.26 4.16 4.36 0.68
Responsibility Ideal Personality Waitlist-Control 2 147 4.24 4.13 4.35 0.69
Responsibility Ideal Personality Waitlist-Control 3 125 4.26 4.13 4.39 0.73
Neuroticism Current Personality Self-Improvement 1 338 3.25 3.16 3.35 0.87
Neuroticism Current Personality Self-Improvement 2 293 3.06 2.96 3.15 0.81
Neuroticism Current Personality Self-Improvement 3 262 2.99 2.89 3.08 0.79
Neuroticism Current Personality Self-Acceptance 1 336 3.22 3.13 3.31 0.83
Neuroticism Current Personality Self-Acceptance 2 284 3.07 2.97 3.17 0.85
Neuroticism Current Personality Self-Acceptance 3 252 3.03 2.92 3.13 0.84
Neuroticism Current Personality Waitlist-Control 1 174 3.33 3.20 3.46 0.89
Neuroticism Current Personality Waitlist-Control 2 147 3.20 3.06 3.35 0.90
Neuroticism Current Personality Waitlist-Control 3 125 3.10 2.94 3.27 0.94
Neuroticism Ideal Personality Self-Improvement 1 338 1.67 1.62 1.72 0.49
Neuroticism Ideal Personality Self-Improvement 2 293 1.71 1.65 1.77 0.51
Neuroticism Ideal Personality Self-Improvement 3 262 1.70 1.65 1.76 0.46
Neuroticism Ideal Personality Self-Acceptance 1 336 1.70 1.65 1.76 0.53
Neuroticism Ideal Personality Self-Acceptance 2 284 1.70 1.64 1.76 0.50
Neuroticism Ideal Personality Self-Acceptance 3 252 1.71 1.65 1.77 0.50
Neuroticism Ideal Personality Waitlist-Control 1 174 1.67 1.60 1.75 0.52
Neuroticism Ideal Personality Waitlist-Control 2 147 1.70 1.62 1.78 0.49
Neuroticism Ideal Personality Waitlist-Control 3 125 1.71 1.62 1.81 0.52
Anxiety Current Personality Self-Improvement 1 338 3.62 3.52 3.71 0.89
Anxiety Current Personality Self-Improvement 2 293 3.45 3.35 3.55 0.87
Anxiety Current Personality Self-Improvement 3 262 3.35 3.25 3.45 0.84
Anxiety Current Personality Self-Acceptance 1 336 3.53 3.43 3.62 0.93
Anxiety Current Personality Self-Acceptance 2 284 3.40 3.29 3.51 0.94
Anxiety Current Personality Self-Acceptance 3 252 3.38 3.26 3.50 0.94
Anxiety Current Personality Waitlist-Control 1 174 3.67 3.54 3.81 0.89
Anxiety Current Personality Waitlist-Control 2 147 3.60 3.46 3.74 0.88
Anxiety Current Personality Waitlist-Control 3 125 3.46 3.30 3.63 0.96
Anxiety Ideal Personality Self-Improvement 1 338 1.84 1.77 1.91 0.62
Anxiety Ideal Personality Self-Improvement 2 293 1.88 1.81 1.95 0.63
Anxiety Ideal Personality Self-Improvement 3 262 1.92 1.85 2.00 0.60
Anxiety Ideal Personality Self-Acceptance 1 336 1.88 1.81 1.95 0.66
Anxiety Ideal Personality Self-Acceptance 2 284 1.90 1.82 1.98 0.66
Anxiety Ideal Personality Self-Acceptance 3 252 1.89 1.81 1.97 0.63
Anxiety Ideal Personality Waitlist-Control 1 174 1.88 1.78 1.98 0.67
Anxiety Ideal Personality Waitlist-Control 2 147 1.95 1.85 2.06 0.67
Anxiety Ideal Personality Waitlist-Control 3 125 1.91 1.80 2.03 0.64
Depression Current Personality Self-Improvement 1 338 3.15 3.04 3.26 1.02
Depression Current Personality Self-Improvement 2 293 2.91 2.80 3.02 0.96
Depression Current Personality Self-Improvement 3 262 2.81 2.70 2.93 0.97
Depression Current Personality Self-Acceptance 1 336 3.14 3.04 3.25 0.96
Depression Current Personality Self-Acceptance 2 284 2.92 2.81 3.04 0.98
Depression Current Personality Self-Acceptance 3 252 2.87 2.75 2.99 0.98
Depression Current Personality Waitlist-Control 1 174 3.17 3.00 3.34 1.13
Depression Current Personality Waitlist-Control 2 147 3.02 2.84 3.20 1.09
Depression Current Personality Waitlist-Control 3 125 2.89 2.69 3.09 1.12
Depression Ideal Personality Self-Improvement 1 337 1.48 1.42 1.54 0.54
Depression Ideal Personality Self-Improvement 2 292 1.51 1.45 1.58 0.55
Depression Ideal Personality Self-Improvement 3 262 1.47 1.41 1.54 0.54
Depression Ideal Personality Self-Acceptance 1 336 1.50 1.44 1.56 0.57
Depression Ideal Personality Self-Acceptance 2 284 1.49 1.43 1.55 0.52
Depression Ideal Personality Self-Acceptance 3 252 1.46 1.40 1.52 0.51
Depression Ideal Personality Waitlist-Control 1 174 1.46 1.37 1.54 0.59
Depression Ideal Personality Waitlist-Control 2 147 1.47 1.38 1.56 0.54
Depression Ideal Personality Waitlist-Control 3 125 1.49 1.38 1.59 0.61
Volatility Current Personality Self-Improvement 1 338 2.99 2.88 3.11 1.06
Volatility Current Personality Self-Improvement 2 293 2.81 2.70 2.92 0.94
Volatility Current Personality Self-Improvement 3 262 2.79 2.68 2.91 0.94
Volatility Current Personality Self-Acceptance 1 336 2.99 2.89 3.10 0.99
Volatility Current Personality Self-Acceptance 2 284 2.89 2.78 3.00 0.95
Volatility Current Personality Self-Acceptance 3 252 2.83 2.72 2.95 0.93
Volatility Current Personality Waitlist-Control 1 174 3.14 2.98 3.30 1.07
Volatility Current Personality Waitlist-Control 2 147 2.98 2.81 3.16 1.09
Volatility Current Personality Waitlist-Control 3 125 2.95 2.77 3.14 1.05
Volatility Ideal Personality Self-Improvement 1 338 1.70 1.63 1.76 0.61
Volatility Ideal Personality Self-Improvement 2 293 1.74 1.67 1.82 0.68
Volatility Ideal Personality Self-Improvement 3 262 1.71 1.64 1.78 0.58
Volatility Ideal Personality Self-Acceptance 1 336 1.74 1.67 1.80 0.64
Volatility Ideal Personality Self-Acceptance 2 284 1.71 1.63 1.78 0.64
Volatility Ideal Personality Self-Acceptance 3 252 1.77 1.69 1.85 0.63
Volatility Ideal Personality Waitlist-Control 1 174 1.69 1.59 1.79 0.65
Volatility Ideal Personality Waitlist-Control 2 147 1.68 1.58 1.78 0.63
Volatility Ideal Personality Waitlist-Control 3 125 1.74 1.63 1.85 0.64
Openness Current Personality Self-Improvement 1 338 3.68 3.61 3.74 0.63
Openness Current Personality Self-Improvement 2 293 3.75 3.68 3.83 0.63
Openness Current Personality Self-Improvement 3 262 3.78 3.70 3.85 0.63
Openness Current Personality Self-Acceptance 1 336 3.71 3.64 3.78 0.67
Openness Current Personality Self-Acceptance 2 284 3.79 3.72 3.87 0.66
Openness Current Personality Self-Acceptance 3 252 3.79 3.71 3.87 0.68
Openness Current Personality Waitlist-Control 1 174 3.74 3.64 3.84 0.66
Openness Current Personality Waitlist-Control 2 147 3.80 3.70 3.91 0.65
Openness Current Personality Waitlist-Control 3 125 3.88 3.77 4.00 0.67
Openness Ideal Personality Self-Improvement 1 338 4.09 4.03 4.15 0.57
Openness Ideal Personality Self-Improvement 2 292 4.14 4.08 4.20 0.53
Openness Ideal Personality Self-Improvement 3 262 4.15 4.09 4.22 0.56
Openness Ideal Personality Self-Acceptance 1 335 4.14 4.08 4.20 0.58
Openness Ideal Personality Self-Acceptance 2 284 4.19 4.13 4.26 0.56
Openness Ideal Personality Self-Acceptance 3 252 4.21 4.14 4.28 0.58
Openness Ideal Personality Waitlist-Control 1 174 4.15 4.07 4.24 0.59
Openness Ideal Personality Waitlist-Control 2 147 4.20 4.11 4.30 0.60
Openness Ideal Personality Waitlist-Control 3 125 4.18 4.08 4.29 0.59
Curiosity Current Personality Self-Improvement 1 338 3.80 3.72 3.89 0.77
Curiosity Current Personality Self-Improvement 2 293 3.85 3.76 3.94 0.77
Curiosity Current Personality Self-Improvement 3 262 3.84 3.75 3.93 0.72
Curiosity Current Personality Self-Acceptance 1 336 3.82 3.73 3.90 0.79
Curiosity Current Personality Self-Acceptance 2 284 3.87 3.77 3.96 0.79
Curiosity Current Personality Self-Acceptance 3 252 3.90 3.80 4.00 0.79
Curiosity Current Personality Waitlist-Control 1 174 3.85 3.75 3.96 0.73
Curiosity Current Personality Waitlist-Control 2 147 3.91 3.79 4.03 0.74
Curiosity Current Personality Waitlist-Control 3 125 3.94 3.81 4.08 0.75
Curiosity Ideal Personality Self-Improvement 1 337 4.08 4.01 4.16 0.71
Curiosity Ideal Personality Self-Improvement 2 292 4.11 4.02 4.19 0.72
Curiosity Ideal Personality Self-Improvement 3 262 4.08 3.99 4.17 0.74
Curiosity Ideal Personality Self-Acceptance 1 335 4.13 4.05 4.21 0.71
Curiosity Ideal Personality Self-Acceptance 2 284 4.16 4.08 4.23 0.67
Curiosity Ideal Personality Self-Acceptance 3 252 4.16 4.08 4.25 0.69
Curiosity Ideal Personality Waitlist-Control 1 174 4.10 3.99 4.21 0.73
Curiosity Ideal Personality Waitlist-Control 2 147 4.12 3.99 4.24 0.76
Curiosity Ideal Personality Waitlist-Control 3 125 4.13 4.01 4.26 0.72
Aesthetic Current Personality Self-Improvement 1 338 3.57 3.48 3.66 0.84
Aesthetic Current Personality Self-Improvement 2 293 3.66 3.57 3.76 0.82
Aesthetic Current Personality Self-Improvement 3 262 3.67 3.57 3.77 0.84
Aesthetic Current Personality Self-Acceptance 1 336 3.66 3.57 3.75 0.87
Aesthetic Current Personality Self-Acceptance 2 284 3.72 3.62 3.83 0.87
Aesthetic Current Personality Self-Acceptance 3 252 3.69 3.58 3.80 0.91
Aesthetic Current Personality Waitlist-Control 1 174 3.70 3.56 3.83 0.91
Aesthetic Current Personality Waitlist-Control 2 147 3.74 3.60 3.88 0.88
Aesthetic Current Personality Waitlist-Control 3 125 3.90 3.75 4.05 0.87
Aesthetic Ideal Personality Self-Improvement 1 337 3.84 3.77 3.92 0.71
Aesthetic Ideal Personality Self-Improvement 2 291 3.90 3.82 3.98 0.71
Aesthetic Ideal Personality Self-Improvement 3 262 3.96 3.87 4.05 0.74
Aesthetic Ideal Personality Self-Acceptance 1 335 3.92 3.85 4.00 0.73
Aesthetic Ideal Personality Self-Acceptance 2 284 4.03 3.95 4.12 0.74
Aesthetic Ideal Personality Self-Acceptance 3 252 4.03 3.94 4.12 0.75
Aesthetic Ideal Personality Waitlist-Control 1 174 3.99 3.88 4.11 0.77
Aesthetic Ideal Personality Waitlist-Control 2 147 4.04 3.92 4.16 0.74
Aesthetic Ideal Personality Waitlist-Control 3 125 4.07 3.93 4.20 0.75
Imagination Current Personality Self-Improvement 1 338 3.66 3.57 3.74 0.82
Imagination Current Personality Self-Improvement 2 293 3.75 3.65 3.84 0.82
Imagination Current Personality Self-Improvement 3 262 3.82 3.73 3.91 0.74
Imagination Current Personality Self-Acceptance 1 336 3.64 3.55 3.73 0.84
Imagination Current Personality Self-Acceptance 2 284 3.79 3.69 3.88 0.79
Imagination Current Personality Self-Acceptance 3 252 3.78 3.68 3.87 0.77
Imagination Current Personality Waitlist-Control 1 174 3.66 3.55 3.78 0.80
Imagination Current Personality Waitlist-Control 2 147 3.76 3.63 3.88 0.79
Imagination Current Personality Waitlist-Control 3 125 3.80 3.67 3.93 0.76
Imagination Ideal Personality Self-Improvement 1 338 4.36 4.29 4.43 0.67
Imagination Ideal Personality Self-Improvement 2 292 4.41 4.33 4.48 0.63
Imagination Ideal Personality Self-Improvement 3 262 4.42 4.35 4.49 0.61
Imagination Ideal Personality Self-Acceptance 1 335 4.37 4.30 4.44 0.68
Imagination Ideal Personality Self-Acceptance 2 284 4.39 4.31 4.46 0.65
Imagination Ideal Personality Self-Acceptance 3 252 4.43 4.35 4.51 0.65
Imagination Ideal Personality Waitlist-Control 1 174 4.37 4.27 4.47 0.70
Imagination Ideal Personality Waitlist-Control 2 147 4.45 4.35 4.56 0.63
Imagination Ideal Personality Waitlist-Control 3 125 4.35 4.23 4.47 0.70

Plotting mean-level changes on a descriptive level: Big Five dimensions and facets

Show the code
ggplot(df_manip_check_forplot, 
       aes(y = m_trait, x = Time, shape = Group, color = Reference)) + 
  geom_point(position = position_dodge(0.45)) +
  scale_shape_manual(values=c(17, 19, 15)) + 
  geom_errorbar(aes(ymin = lwr95, ymax = upr95), width=.3, position=position_dodge(0.45)) +
  ylab("Mean Trait Level (95% CI)") + 
  facet_wrap( ~ Trait, ncol = 4) +
  theme_bw() +
  theme(panel.grid.minor = element_blank(),
        strip.background=element_rect(fill="grey93"))

Plotting mean-level changes on a descriptive level: Extraversion

Show the code
ggplot(df_manip_check_forplot %>% filter(Trait=="Extraversion"), 
       aes(y = m_trait, x = Time, shape = Group, color = Reference)) + 
  geom_point(position = position_dodge(0.35)) +
  scale_shape_manual(values=c(17, 19, 15)) + 
  geom_errorbar(aes(ymin = lwr95, ymax = upr95), width=.3, position=position_dodge(0.35)) +
  ylab("Mean Trait Level (95% CI)") + 
  theme_bw() +
  theme(panel.grid.minor = element_blank(),
        strip.background=element_rect(fill="grey93"))

Plotting mean-level changes on a descriptive level: Agreeableness

Show the code
ggplot(df_manip_check_forplot %>% filter(Trait=="Agreeableness"), 
       aes(y = m_trait, x = Time, shape = Group, color = Reference)) + 
  geom_point(position = position_dodge(0.35)) +
  scale_shape_manual(values=c(17, 19, 15)) + 
  geom_errorbar(aes(ymin = lwr95, ymax = upr95), width=.3, position=position_dodge(0.35)) +
  ylab("Mean Trait Level (95% CI)") + 
  theme_bw() +
  theme(panel.grid.minor = element_blank(),
        strip.background=element_rect(fill="grey93"))

Plotting mean-level changes on a descriptive level: Conscientiousness

Show the code
ggplot(df_manip_check_forplot %>% filter(Trait=="Conscientiousness"), 
       aes(y = m_trait, x = Time, shape = Group, color = Reference)) + 
  geom_point(position = position_dodge(0.35)) +
  scale_shape_manual(values=c(17, 19, 15)) + 
  geom_errorbar(aes(ymin = lwr95, ymax = upr95), width=.3, position=position_dodge(0.35)) +
  ylab("Mean Trait Level (95% CI)") + 
  theme_bw() +
  theme(panel.grid.minor = element_blank(),
        strip.background=element_rect(fill="grey93"))

Plotting mean-level changes on a descriptive level: Neuroticism

Show the code
ggplot(df_manip_check_forplot %>% filter(Trait=="Neuroticism"), 
       aes(y = m_trait, x = Time, shape = Group, color = Reference)) + 
  geom_point(position = position_dodge(0.35)) +
  scale_shape_manual(values=c(17, 19, 15)) + 
  geom_errorbar(aes(ymin = lwr95, ymax = upr95), width=.3, position=position_dodge(0.35)) +
  ylab("Mean Trait Level (95% CI)") + 
  theme_bw() +
  theme(panel.grid.minor = element_blank(),
        strip.background=element_rect(fill="grey93"))

Plotting mean-level changes on a descriptive level: Openness

Show the code
ggplot(df_manip_check_forplot %>% filter(Trait=="Openness"), 
       aes(y = m_trait, x = Time, shape = Group, color = Reference)) + 
  geom_point(position = position_dodge(0.35)) +
  scale_shape_manual(values=c(17, 19, 15)) + 
  geom_errorbar(aes(ymin = lwr95, ymax = upr95), width=.3, position=position_dodge(0.35)) +
  ylab("Mean Trait Level (95% CI)") + 
  theme_bw() +
  theme(panel.grid.minor = element_blank(),
        strip.background=element_rect(fill="grey93"))

7.4.3.2 Well-Being

Prepare data frame for plotting:

Show the code
df_manip_check_wb_forplot <- df_sbsa2 %>% 
  mutate(time_d = time - 1) %>% 
  select(pid, time_d, rando, swls, meaning, selfes, concept) %>% 
  pivot_longer(-c(pid, time_d, rando), 
               cols_vary = "slowest",
               names_to = c("trait"),
               values_to = "score") %>% 
  mutate(trait = case_when(trait=="swls" ~ "Life Satisfaction", trait=="meaning" ~ "Meaning in Life", 
                           trait=="selfes" ~ "Self-Esteem", trait=="concept" ~ "Self-Concept Clarity")) %>% 
  filter(!is.na(score)) %>% 
  group_by(trait, rando, time_d) %>% 
  summarise(n = n(), m_trait = mean(score), sd_trait = sd(score)) %>% 
  ungroup() %>% 
  mutate(Group = factor(rando, levels = c("Self-Improvement", "Self-Acceptance", "Waitlist-Control"), 
                        labels = c("Self-Improvement", "Self-Acceptance", "Waitlist-Control")),
         Time = factor(time_d+1),
         Trait = factor(trait, 
                        levels = c("Life Satisfaction", "Meaning in Life", "Self-Esteem", "Self-Concept Clarity"), # group facets with each trait
                        labels = c("Life Satisfaction", "Meaning in Life", "Self-Esteem", "Self-Concept Clarity")),
         lwr95 = m_trait - qnorm(0.975)*sd_trait/sqrt(n),
         upr95 = m_trait + qnorm(0.975)*sd_trait/sqrt(n)) %>% 
  select(-c(time_d, rando, trait))

Table of all outcomes:

Show the code
df_manip_check_wb_forplot %>% arrange(Trait, Group, Time) %>% 
  mutate_if(is.numeric, round, digits=2) %>% 
  select(Trait, Group, Time, n, m_trait, lwr95, upr95, sd_trait) %>% 
  kable(digits = 2)
Trait Group Time n m_trait lwr95 upr95 sd_trait
Life Satisfaction Self-Improvement 1 337 2.68 2.58 2.79 0.97
Life Satisfaction Self-Improvement 2 293 2.96 2.84 3.07 0.98
Life Satisfaction Self-Improvement 3 262 3.07 2.95 3.20 1.03
Life Satisfaction Self-Acceptance 1 336 2.78 2.67 2.89 0.99
Life Satisfaction Self-Acceptance 2 284 3.03 2.91 3.15 1.04
Life Satisfaction Self-Acceptance 3 252 3.09 2.97 3.22 1.00
Life Satisfaction Waitlist-Control 1 174 2.69 2.53 2.84 1.05
Life Satisfaction Waitlist-Control 2 147 2.90 2.73 3.07 1.05
Life Satisfaction Waitlist-Control 3 125 3.10 2.91 3.29 1.07
Meaning in Life Self-Improvement 1 337 3.53 3.41 3.65 1.12
Meaning in Life Self-Improvement 2 293 3.78 3.65 3.91 1.13
Meaning in Life Self-Improvement 3 262 3.93 3.78 4.08 1.24
Meaning in Life Self-Acceptance 1 336 3.52 3.40 3.65 1.17
Meaning in Life Self-Acceptance 2 284 3.75 3.61 3.88 1.15
Meaning in Life Self-Acceptance 3 252 3.95 3.81 4.09 1.15
Meaning in Life Waitlist-Control 1 174 3.51 3.32 3.69 1.23
Meaning in Life Waitlist-Control 2 147 3.82 3.62 4.02 1.23
Meaning in Life Waitlist-Control 3 125 3.96 3.75 4.18 1.23
Self-Esteem Self-Improvement 1 337 3.20 3.11 3.29 0.88
Self-Esteem Self-Improvement 2 293 3.53 3.43 3.62 0.80
Self-Esteem Self-Improvement 3 262 3.59 3.49 3.69 0.85
Self-Esteem Self-Acceptance 1 336 3.19 3.10 3.28 0.85
Self-Esteem Self-Acceptance 2 284 3.47 3.36 3.57 0.88
Self-Esteem Self-Acceptance 3 252 3.53 3.42 3.64 0.89
Self-Esteem Waitlist-Control 1 174 3.22 3.09 3.36 0.92
Self-Esteem Waitlist-Control 2 147 3.43 3.28 3.58 0.93
Self-Esteem Waitlist-Control 3 125 3.58 3.41 3.74 0.95
Self-Concept Clarity Self-Improvement 1 337 2.98 2.89 3.08 0.90
Self-Concept Clarity Self-Improvement 2 293 3.23 3.13 3.33 0.87
Self-Concept Clarity Self-Improvement 3 262 3.28 3.16 3.39 0.94
Self-Concept Clarity Self-Acceptance 1 336 2.96 2.87 3.05 0.85
Self-Concept Clarity Self-Acceptance 2 284 3.18 3.08 3.28 0.88
Self-Concept Clarity Self-Acceptance 3 252 3.27 3.16 3.38 0.88
Self-Concept Clarity Waitlist-Control 1 174 3.07 2.92 3.21 0.97
Self-Concept Clarity Waitlist-Control 2 147 3.18 3.03 3.34 0.98
Self-Concept Clarity Waitlist-Control 3 125 3.24 3.06 3.41 1.00

Plotting mean-level changes on a descriptive level: all four well-being aspects

Show the code
ggplot(df_manip_check_wb_forplot, 
       aes(y = m_trait, x = Time, shape = Group)) + 
  geom_point(position = position_dodge(0.3)) +
  scale_shape_manual(values=c(17, 19, 15)) + 
  geom_errorbar(aes(ymin = lwr95, ymax = upr95), width=.3, position=position_dodge(0.3)) +
  ylab("Mean Well-Being Level (95% CI)") + 
  facet_wrap( ~ Trait, ncol = 2) +
  theme_bw() +
  theme(panel.grid.minor = element_blank(),
        strip.background=element_rect(fill="grey93"))

7.5 Word clouds of change descriptions (e)

Generate word clouds based on the content from the free-form change descriptions written after the intervention at T2 and T3 (same question asked at both time points).

For data protection reasons, we don’t provide the free-form change descriptions on the OSF. Therefore, the following code chunks are not run (eval: false). We do, however, provide an even more extensive overview of these open-response variables including word clouds in the separate document textmining.html.

Prepare data, separately for each intervention group

Show the code
# see tutorial here: https://towardsdatascience.com/create-a-word-cloud-with-r-bde3e7422e8a

# self-improvement group

# Create a vector containing only the text
text_sb <- df_sbsa2 %>% filter(!is.na(sb14_01) & rando!="Waitlist-Control") %>% pull(sb14_01)
text_sb <- gsub("[\r\n]", " ", text_sb)
# Create a corpus  
docs_sb <- tm::VCorpus(tm::VectorSource(text_sb))

# cleaning the text
docs_sb <- docs_sb %>%
  tm_map(removeNumbers) %>%
  tm_map(removePunctuation) %>%
  tm_map(stripWhitespace)
docs_sb <- tm_map(docs_sb, content_transformer(tolower))
docs_sb <- tm_map(docs_sb, removeWords, stopwords("english"))

# Create a document-term-matrix
dtm_sb <- TermDocumentMatrix(docs_sb) 
matrix_sb <- as.matrix(dtm_sb) 
words_sb <- sort(rowSums(matrix_sb), decreasing=TRUE) 
df_words_sb <- data.frame(word = names(words_sb), freq=words_sb)
# remove a few of the frequent "non-words"
df_words_sb <- df_words_sb %>% as_tibble() %>% 
  filter(!word %in% c("ive", "didnt", "cant", "dont"))

# self-acceptance group

# Create a vector containing only the text
text_sa <- df_sbsa2 %>% filter(!is.na(sa13_01) & rando!="Waitlist-Control") %>% pull(sa13_01)
text_sa <- gsub("[\r\n]", " ", text_sa)
# Create a corpus  
docs_sa <- tm::VCorpus(tm::VectorSource(text_sa))

# cleaning the text
docs_sa <- docs_sa %>%
  tm_map(removeNumbers) %>%
  tm_map(removePunctuation) %>%
  tm_map(stripWhitespace)
docs_sa <- tm_map(docs_sa, content_transformer(tolower))
docs_sa <- tm_map(docs_sa, removeWords, stopwords("english"))

# Create a document-term-matrix
dtm_sa <- TermDocumentMatrix(docs_sa) 
matrix_sa <- as.matrix(dtm_sa) 
words_sa <- sort(rowSums(matrix_sa), decreasing=TRUE) 
df_words_sa <- data.frame(word = names(words_sa), freq=words_sa)
# remove a few of the frequent "non-words"
df_words_sa <- df_words_sa %>% as_tibble() %>% 
  filter(!word %in% c("ive", "didnt", "cant", "dont"))

Generate the word cloud: for self-improvement group

Show the code
set.seed(1234) # for reproducibility 
wordcloud(words = df_words_sb$word, freq = df_words_sb$freq, min.freq = 1,           
          max.words=150, random.order=FALSE, rot.per=0.35,            
          colors=brewer.pal(8, "Dark2"))

Generate the word cloud: for self-acceptance group

Show the code
set.seed(1234) # for reproducibility 
wordcloud(words = df_words_sa$word, freq = df_words_sa$freq, min.freq = 1,           
          max.words=150, random.order=FALSE, rot.per=0.35,            
          colors=brewer.pal(8, "Dark2"))

Lastly, delete free-form text variables again from data set

df_sbsa2 <- df_sbsa2 %>% select(-any_of(c("sb14_01", "sa13_01")))
base::save(df_sbsa2, file = "data/df_sbsa2.rda")

7.6 Word clouds of diary entries (f)

Generate word clouds based on the content of the three diaries written between T1 and T2. I only focus on the two intervention groups here (not on the CG between T2 and T3).

For data protection reasons, we don’t provide the diary entries on the OSF. Therefore, the following code chunks are not run (eval: false). We do, however, provide an even more extensive overview of all open-response variables including word clouds of the diaries in the separate document textmining.html.

Read in the data and see how many people filled out the diaries (optional but still compensated)

Show the code
path_diar1_sb <- "data/diaries/sb_1/data_PersonalityChange_2024-03-22_14-37.xlsx"
path_diar2_sb <- "data/diaries/sb_2/data_PersonalityChange_2024-03-22_16-19.xlsx"
path_diar3_sb <- "data/diaries/sb_3/data_PersonalityChange_2024-03-22_16-22.xlsx"

path_diar1_sa <- "data/diaries/sa_1/data_PersonalityChange_2024-03-22_16-18.xlsx"
path_diar2_sa <- "data/diaries/sa_2/data_PersonalityChange_2024-03-22_16-20.xlsx"
path_diar3_sa <- "data/diaries/sa_3/data_PersonalityChange_2024-03-22_16-22.xlsx"

# T1
diar1_sb <- readxl::read_excel(path_diar1_sb, col_names = F, skip = 2, guess_max = 10000)
var_names1_sb <- readxl::read_excel(path_diar1_sb, col_names = F)[c(1,2), ]
var_names1_sb <- data.frame(t(var_names1_sb))
colnames(diar1_sb) <- stringr::str_to_lower(var_names1_sb$X1) # only lower case pls
# label data 
diar1_sb <- labelled::set_variable_labels(diar1_sb, .labels = var_names1_sb$X2)
diar1_sb <- diar1_sb %>% filter(dm01_01!="Test" & !is.na(sb15_01)) %>% select(dm01_01, sb15_01)

diar1_sa <- readxl::read_excel(path_diar1_sa, col_names = F, skip = 2, guess_max = 10000)
var_names1_sa <- readxl::read_excel(path_diar1_sa, col_names = F)[c(1,2), ]
var_names1_sa <- data.frame(t(var_names1_sa))
colnames(diar1_sa) <- stringr::str_to_lower(var_names1_sa$X1) # only lower case pls
# label data 
diar1_sa <- labelled::set_variable_labels(diar1_sa, .labels = var_names1_sa$X2)
diar1_sa <- diar1_sa %>% filter(dm01_01!="Test" & !is.na(sa15_01)) %>% select(dm01_01, sa15_01)

# T2
diar2_sb <- readxl::read_excel(path_diar2_sb, col_names = F, skip = 2, guess_max = 10000)
var_names2_sb <- readxl::read_excel(path_diar2_sb, col_names = F)[c(1,2), ]
var_names2_sb <- data.frame(t(var_names2_sb))
colnames(diar2_sb) <- stringr::str_to_lower(var_names2_sb$X1) # only lower case pls
# label data 
diar2_sb <- labelled::set_variable_labels(diar2_sb, .labels = var_names2_sb$X2)
diar2_sb <- diar2_sb %>% filter(dm01_01!="Test" & !is.na(sb15_01)) %>% select(dm01_01, sb15_01)

diar2_sa <- readxl::read_excel(path_diar2_sa, col_names = F, skip = 2, guess_max = 10000)
var_names2_sa <- readxl::read_excel(path_diar2_sa, col_names = F)[c(1,2), ]
var_names2_sa <- data.frame(t(var_names2_sa))
colnames(diar2_sa) <- stringr::str_to_lower(var_names2_sa$X1) # only lower case pls
# label data 
diar2_sa <- labelled::set_variable_labels(diar2_sa, .labels = var_names2_sa$X2)
diar2_sa <- diar2_sa %>% filter(dm01_01!="Test" & !is.na(sa15_01)) %>% select(dm01_01, sa15_01)

# T3
diar3_sb <- readxl::read_excel(path_diar3_sb, col_names = F, skip = 2, guess_max = 10000)
var_names3_sb <- readxl::read_excel(path_diar3_sb, col_names = F)[c(1,2), ]
var_names3_sb <- data.frame(t(var_names3_sb))
colnames(diar3_sb) <- stringr::str_to_lower(var_names3_sb$X1) # only lower case pls
# label data 
diar3_sb <- labelled::set_variable_labels(diar3_sb, .labels = var_names3_sb$X2)
diar3_sb <- diar3_sb %>% filter(dm01_01!="Test" & !is.na(sb15_01)) %>% select(dm01_01, sb15_01)

diar3_sa <- readxl::read_excel(path_diar3_sa, col_names = F, skip = 2, guess_max = 10000)
var_names3_sa <- readxl::read_excel(path_diar3_sa, col_names = F)[c(1,2), ]
var_names3_sa <- data.frame(t(var_names3_sa))
colnames(diar3_sa) <- stringr::str_to_lower(var_names3_sa$X1) # only lower case pls
# label data 
diar3_sa <- labelled::set_variable_labels(diar3_sa, .labels = var_names3_sa$X2)
diar3_sa <- diar3_sa %>% filter(dm01_01!="Test" & !is.na(sa15_01)) %>% select(dm01_01, sa15_01)

# appending together all three diaries in each group
diaries_sb <- bind_rows(diar1_sb, diar2_sb, diar3_sb)
diaries_sa <- bind_rows(diar1_sa, diar2_sa, diar3_sa)

# filter out one case where it was obvious that they used a LLM
diaries_sb <- diaries_sb %>% filter(!str_detect(sb15_01, "language model"))

How many diaries at each time point?

tibble(time = c(1, 2, 3), improve = c(nrow(diar1_sb), nrow(diar2_sb), nrow(diar2_sb)),
       accept = c(nrow(diar1_sa), nrow(diar2_sa), nrow(diar2_sa)))

Prepare data, separately for each intervention group

Show the code
# see tutorial here: https://towardsdatascience.com/create-a-word-cloud-with-r-bde3e7422e8a

# self-improvement group

# Create a vector containing only the text
text_diaries_sb <- diaries_sb %>% pull(sb15_01)
text_diaries_sb <- gsub("[\r\n]", " ", text_diaries_sb)
# Create a corpus  
docs_diaries_sb <- tm::VCorpus(tm::VectorSource(text_diaries_sb))

# cleaning the text
docs_diaries_sb <- docs_diaries_sb %>%
  tm_map(removeNumbers) %>%
  tm_map(removePunctuation) %>%
  tm_map(stripWhitespace)
docs_diaries_sb <- tm_map(docs_diaries_sb, content_transformer(tolower))
docs_diaries_sb <- tm_map(docs_diaries_sb, removeWords, stopwords("english"))

# Create a document-term-matrix
dtm_diaries_sb <- TermDocumentMatrix(docs_diaries_sb) 
matrix_diaries_sb <- as.matrix(dtm_diaries_sb) 
words_diaries_sb <- sort(rowSums(matrix_diaries_sb), decreasing=TRUE) 
df_words_diaries_sb <- data.frame(word = names(words_diaries_sb), freq=words_diaries_sb)
# remove a few of the frequent "non-words"
df_words_diaries_sb <- df_words_diaries_sb %>% as_tibble() %>% 
  filter(!word %in% c("ive", "didnt", "cant", "dont"))

# self-acceptance group

# Create a vector containing only the text
text_diaries_sa <- diaries_sa %>% pull(sa15_01)
text_diaries_sa <- gsub("[\r\n]", " ", text_diaries_sa)
# Create a corpus  
docs_diaries_sa <- tm::VCorpus(tm::VectorSource(text_diaries_sa))

# cleaning the text
docs_diaries_sa <- docs_diaries_sa %>%
  tm_map(removeNumbers) %>%
  tm_map(removePunctuation) %>%
  tm_map(stripWhitespace)
docs_diaries_sa <- tm_map(docs_diaries_sa, content_transformer(tolower))
docs_diaries_sa <- tm_map(docs_diaries_sa, removeWords, stopwords("english"))

# Create a document-term-matrix
dtm_diaries_sa <- TermDocumentMatrix(docs_diaries_sa) 
matrix_diaries_sa <- as.matrix(dtm_diaries_sa) 
words_diaries_sa <- sort(rowSums(matrix_diaries_sa), decreasing=TRUE) 
df_words_diaries_sa <- data.frame(word = names(words_diaries_sa), freq=words_diaries_sa)
# remove a few of the frequent "non-words"
df_words_diaries_sa <- df_words_diaries_sa %>% as_tibble() %>% 
  filter(!word %in% c("ive", "didnt", "cant", "dont"))

Generate the word cloud: for self-improvement group

Show the code
set.seed(1234) # for reproducibility 
wordcloud(words = df_words_diaries_sb$word, freq = df_words_diaries_sb$freq, min.freq = 1,           
          max.words=150, random.order=FALSE, rot.per=0.35,            
          colors=brewer.pal(8, "Dark2"))

Generate the word cloud: for self-acceptance group

Show the code
set.seed(1234) # for reproducibility 
wordcloud(words = df_words_diaries_sa$word, freq = df_words_diaries_sa$freq, min.freq = 1,           
          max.words=150, random.order=FALSE, rot.per=0.35,            
          colors=brewer.pal(8, "Dark2"))

7.7 Age as moderator of trait change (f)

Does age moderate the extent to which participants in the intervention changed over time?

7.7.1 Descriptives: Age & change goals

Some descriptives first:

# without the control group to make this similar to Study 1
df_sbsa2_age <- df_sbsa2 %>% filter(rando != "Waitlist-Control")

summary(df_sbsa2_age$age)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
  18.00   24.00   28.00   30.62   35.00   69.00       3 

Correlation age & general improvement goal

cor.test(df_sbsa2_age$age, df_sbsa2_age$sb06_01)

    Pearson's product-moment correlation

data:  df_sbsa2_age$age and df_sbsa2_age$sb06_01
t = -0.66655, df = 335, p-value = 0.5055
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.14267388  0.07071672
sample estimates:
        cor 
-0.03639342 

Correlation not significant.

Frequency of self-improvement behaviors
- (1) I thought about the ways I would like to change
- (2) I sought out environments that would help me be the kind of person I want to be
- (3) I practiced new habits to achieve my change goals

Show the code
kable(
bind_rows(
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sb04_01)) %>% mutate(item = "sb04_01"),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sb04_02)) %>% mutate(item = "sb04_02"),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sb04_03)) %>% mutate(item = "sb04_03")
) %>% select(item, estimate, conf.low, conf.high, p.value)
  , digits = 3)
item estimate conf.low conf.high p.value
sb04_01 -0.108 -0.220 0.006 0.064
sb04_02 -0.136 -0.246 -0.021 0.020
sb04_03 -0.188 -0.297 -0.075 0.001

Facet-level improvement goals

Show the code
kable(
bind_rows(
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sb07_01)) %>% mutate(facet = names(b5_vars)[5 + 1]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sb07_02)) %>% mutate(facet = names(b5_vars)[5 + 2]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sb07_03)) %>% mutate(facet = names(b5_vars)[5 + 3]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sb07_04)) %>% mutate(facet = names(b5_vars)[5 + 4]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sb07_05)) %>% mutate(facet = names(b5_vars)[5 + 5]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sb07_06)) %>% mutate(facet = names(b5_vars)[5 + 6]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sb07_07)) %>% mutate(facet = names(b5_vars)[5 + 7]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sb07_08)) %>% mutate(facet = names(b5_vars)[5 + 8]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sb07_09)) %>% mutate(facet = names(b5_vars)[5 + 9]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sb07_10)) %>% mutate(facet = names(b5_vars)[5 + 10]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sb07_11)) %>% mutate(facet = names(b5_vars)[5 + 11]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sb07_12)) %>% mutate(facet = names(b5_vars)[5 + 12]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sb07_13)) %>% mutate(facet = names(b5_vars)[5 + 13]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sb07_14)) %>% mutate(facet = names(b5_vars)[5 + 14]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sb07_15)) %>% mutate(facet = names(b5_vars)[5 + 15])
) %>% select(facet, estimate, conf.low, conf.high, p.value)
  , digits = 3)
facet estimate conf.low conf.high p.value
sociability -0.170 -0.272 -0.065 0.002
assertiveness -0.085 -0.190 0.022 0.119
energy 0.080 -0.027 0.185 0.143
compassion -0.097 -0.202 0.010 0.075
respectfulness -0.102 -0.206 0.005 0.063
trust -0.026 -0.133 0.081 0.632
organization -0.143 -0.246 -0.037 0.009
productiveness -0.171 -0.272 -0.065 0.002
responsibility -0.131 -0.235 -0.025 0.016
anxiety -0.108 -0.213 -0.002 0.047
depression -0.114 -0.218 -0.007 0.037
volatility -0.100 -0.205 0.007 0.067
curiosity -0.057 -0.163 0.050 0.293
aesthetic 0.033 -0.075 0.139 0.552
imagination 0.025 -0.082 0.132 0.641

Negative correlations for conscientiousness facets.

Correlation age & general acceptance goal

cor.test(df_sbsa2_age$age, df_sbsa2_age$sa06_01)

    Pearson's product-moment correlation

data:  df_sbsa2_age$age and df_sbsa2_age$sa06_01
t = -3.2181, df = 333, p-value = 0.001417
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.27569323 -0.06777694
sample estimates:
       cor 
-0.1736697 

Significant negative correlation.

Frequency of self-acceptance behaviors
- (1) I thought about how I could be less judgmental and more self-affirming
- (2) I sought out environments that would help me accept who I am
- (3) I practiced new self-acceptance habits to affirm who I am

Show the code
kable(
bind_rows(
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sa04_01)) %>% mutate(item = "sa04_01"),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sa04_02)) %>% mutate(item = "sa04_02"),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sa04_03)) %>% mutate(item = "sa04_03")
) %>% select(item, estimate, conf.low, conf.high, p.value)
  , digits = 3)
item estimate conf.low conf.high p.value
sa04_01 -0.064 -0.179 0.053 0.284
sa04_02 -0.087 -0.201 0.031 0.147
sa04_03 0.036 -0.081 0.153 0.543

Facet-level acceptance goals

Show the code
kable(
bind_rows(
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sa07_01)) %>% mutate(facet = names(b5_vars)[5 + 1]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sa07_02)) %>% mutate(facet = names(b5_vars)[5 + 2]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sa07_03)) %>% mutate(facet = names(b5_vars)[5 + 3]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sa07_04)) %>% mutate(facet = names(b5_vars)[5 + 4]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sa07_05)) %>% mutate(facet = names(b5_vars)[5 + 5]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sa07_06)) %>% mutate(facet = names(b5_vars)[5 + 6]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sa07_07)) %>% mutate(facet = names(b5_vars)[5 + 7]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sa07_08)) %>% mutate(facet = names(b5_vars)[5 + 8]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sa07_09)) %>% mutate(facet = names(b5_vars)[5 + 9]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sa07_10)) %>% mutate(facet = names(b5_vars)[5 + 10]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sa07_11)) %>% mutate(facet = names(b5_vars)[5 + 11]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sa07_12)) %>% mutate(facet = names(b5_vars)[5 + 12]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sa07_13)) %>% mutate(facet = names(b5_vars)[5 + 13]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sa07_14)) %>% mutate(facet = names(b5_vars)[5 + 14]),
  tidy(cor.test(df_sbsa2_age$age, df_sbsa2_age$sa07_15)) %>% mutate(facet = names(b5_vars)[5 + 15])
) %>% select(facet, estimate, conf.low, conf.high, p.value)
  , digits = 3)
facet estimate conf.low conf.high p.value
sociability -0.135 -0.238 -0.028 0.014
assertiveness 0.014 -0.094 0.120 0.805
energy 0.003 -0.104 0.110 0.960
compassion -0.071 -0.176 0.037 0.198
respectfulness -0.070 -0.176 0.038 0.202
trust -0.076 -0.182 0.031 0.165
organization -0.154 -0.256 -0.047 0.005
productiveness -0.184 -0.285 -0.078 0.001
responsibility -0.107 -0.212 0.000 0.050
anxiety 0.002 -0.105 0.109 0.968
depression -0.035 -0.141 0.073 0.526
volatility -0.093 -0.198 0.014 0.088
curiosity -0.075 -0.181 0.032 0.170
aesthetic -0.027 -0.134 0.081 0.626
imagination -0.039 -0.146 0.068 0.477

Negative correlations for conscientiousness facets.

Correlation age & profile similarity (facet-level)

cor.test(df_sbsa2_age$age, df_sbsa2_age$profile_corr_facet_z)

    Pearson's product-moment correlation

data:  df_sbsa2_age$age and df_sbsa2_age$profile_corr_facet_z
t = 7.3729, df = 1757, p-value = 2.559e-13
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.1275297 0.2182062
sample estimates:
      cor 
0.1732351 

Correlation age & profile similarity (item-level)

cor.test(df_sbsa2_age$age, df_sbsa2_age$profile_corr_item_z)

    Pearson's product-moment correlation

data:  df_sbsa2_age$age and df_sbsa2_age$profile_corr_item_z
t = 7.5012, df = 1755, p-value = 9.988e-14
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.1305665 0.2211961
sample estimates:
      cor 
0.1762548 

Significantly higher similarity between current- and ideal-personality with older age.

7.7.2 Moderation analysis: linear age

Reshape and split data set by intervention group:

Show the code
df_sbsa2_wide_pers_mod_age <- df_sbsa2 %>% 
  filter(rando != "Waitlist-Control") %>% 
  arrange(pid, time) %>% 
  mutate(age_z = (age - mean(age, na.rm=T)) / sd(age, na.rm=T)) %>% 
  group_by(pid) %>% slice_head(n=1) %>% ungroup() %>% 
  select(pid, age_z)

df_sbsa2_wide_pers_mod_age <- df_sbsa2_wide_pers %>% left_join(group_assign) %>% filter(rando != "Waitlist-Control") %>% 
  left_join(df_sbsa2_wide_pers_mod_age)
7.7.2.1 Run models

Adapt latent change score model from above (adding moderation by age) and add grouping factor in estimation (adding vectorized equality constraints to the model step by step):

Show the code
# create templates:

# configural invariance
trait_template_age_config <- '
trait_t1 =~ 1*ind01_t1 +  c("lamb2a", "lamb2b")*ind02_t1 + c("lamb3a", "lamb3b")*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 +  c("lamb2a", "lamb2b")*ind02_t2 + c("lamb3a", "lamb3b")*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ c("d_int_a", "d_int_b")*1              # This estimates the intercept of the change score 
trait_t1 ~ c("b5_int_a", "b5_int_b")*1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ c("d_var_a", "d_var_b")*d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ c("b5_var_a", "b5_var_b")*trait_t1         # This estimates the variance of trait_t1 
d_trait_1 ~~ c("fb_a", "fb_b")* trait_t1   # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score
trait_t1 ~ c("main_a", "main_b")*age_z           # This estimates the moderation effect on personality at T1
d_trait_1 ~ c("mod_a", "mod_b")*age_z          # This estimates the moderation effect on the change score

age_z ~ 0*1            # This fixes the intercept of the moderator to 0
age_z ~~ c("varmod_a", "varmod_b")*age_z         # This estimates the variance of the moderator

ind01_t1 ~~ c("cov1a", "cov1b")*ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ c("cov2a", "cov2b")*ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ c("cov3a", "cov3b")*ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ c("res1a", "res1b")*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ c("res2a", "res2b")*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ c("res3a", "res3b")*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ c("res1a", "res1b")*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ c("res2a", "res2b")*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ c("res3a", "res3b")*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

# weak invariance
trait_template_age_weak <- '
trait_t1 =~ 1*ind01_t1 +  c("lamb2", "lamb2")*ind02_t1 + c("lamb3", "lamb3")*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 +  c("lamb2", "lamb2")*ind02_t2 + c("lamb3", "lamb3")*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ c("d_int_a", "d_int_b")*1              # This estimates the intercept of the change score 
trait_t1 ~ c("b5_int_a", "b5_int_b")*1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ c("d_var_a", "d_var_b")*d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ c("b5_var_a", "b5_var_b")*trait_t1         # This estimates the variance of trait_t1 
d_trait_1 ~~ c("fb_a", "fb_b")* trait_t1   # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score
trait_t1 ~ c("main_a", "main_b")*age_z           # This estimates the moderation effect on personality at T1
d_trait_1 ~ c("mod_a", "mod_b")*age_z          # This estimates the moderation effect on the change score

age_z ~ 0*1            # This fixes the intercept of the moderator to 0
age_z ~~ c("varmod_a", "varmod_b")*age_z         # This estimates the variance of the moderator

ind01_t1 ~~ c("cov1a", "cov1b")*ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ c("cov2a", "cov2b")*ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ c("cov3a", "cov3b")*ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ c("res1a", "res1b")*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ c("res2a", "res2b")*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ c("res3a", "res3b")*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ c("res1a", "res1b")*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ c("res2a", "res2b")*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ c("res3a", "res3b")*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

# strong invariance
trait_template_age_strong <- '
trait_t1 =~ 1*ind01_t1 +  c("lamb2", "lamb2")*ind02_t1 + c("lamb3", "lamb3")*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 +  c("lamb2", "lamb2")*ind02_t2 + c("lamb3", "lamb3")*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ c("d_int", "d_int")*1              # This estimates the intercept of the change score 
trait_t1 ~ c("b5_int", "b5_int")*1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ c("d_var_a", "d_var_b")*d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ c("b5_var_a", "b5_var_b")*trait_t1         # This estimates the variance of trait_t1 
d_trait_1 ~~ c("fb_a", "fb_b")* trait_t1   # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score
trait_t1 ~ c("main", "main")*age_z         # This estimates the moderation effect on personality at T1
d_trait_1 ~ c("mod", "mod")*age_z          # This estimates the moderation effect on the change score

age_z ~ 0*1            # This fixes the intercept of the moderator to 0
age_z ~~ c("varmod_a", "varmod_b")*age_z         # This estimates the variance of the moderator

ind01_t1 ~~ c("cov1a", "cov1b")*ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ c("cov2a", "cov2b")*ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ c("cov3a", "cov3b")*ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ c("res1a", "res1b")*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ c("res2a", "res2b")*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ c("res3a", "res3b")*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ c("res1a", "res1b")*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ c("res2a", "res2b")*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ c("res3a", "res3b")*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T2
'

# strict invariance -> not really needed for this analysis

# loop across 5 traits
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # configural - current
  template_filled_config_current <- str_replace_all(trait_template_age_config, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_age_fit_config_current <- lavaan(template_filled_config_current, 
                                          data = df_sbsa2_wide_pers_mod_age, 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_age_config_current")), template_filled_config_current))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_age_config_current")), trait_age_fit_config_current))
  # configural - ideal
  template_filled_config_ideal <- str_replace_all(trait_template_age_config, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_age_fit_config_ideal <- lavaan(template_filled_config_ideal, 
                                        data = df_sbsa2_wide_pers_mod_age, 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_age_config_ideal")), template_filled_config_ideal))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_age_config_ideal")), trait_age_fit_config_ideal))
  # weak - current
  template_filled_weak_current <- str_replace_all(trait_template_age_weak, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_age_fit_weak_current <- lavaan(template_filled_weak_current, 
                                          data = df_sbsa2_wide_pers_mod_age, 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando", group.equal = "loadings")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_age_weak_current")), template_filled_weak_current))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_age_weak_current")), trait_age_fit_weak_current))
  # weak - ideal
  template_filled_weak_ideal <- str_replace_all(trait_template_age_weak, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_age_fit_weak_ideal <- lavaan(template_filled_weak_ideal, 
                                        data = df_sbsa2_wide_pers_mod_age, 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando", group.equal = "loadings")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_age_weak_ideal")), template_filled_weak_ideal))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_age_weak_ideal")), trait_age_fit_weak_ideal))
  # strong - current
  template_filled_strong_current <- str_replace_all(trait_template_age_strong, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_age_fit_strong_current <- lavaan(template_filled_strong_current, 
                                          data = df_sbsa2_wide_pers_mod_age, 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando", group.equal = c("intercepts", "loadings"))
  eval(call("<-", as.name(paste0("lcs_", short_name, "_age_strong_current")), template_filled_strong_current))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_age_strong_current")), trait_age_fit_strong_current))
  # strong - ideal
  template_filled_strong_ideal <- str_replace_all(trait_template_age_strong, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_age_fit_strong_ideal <- lavaan(template_filled_strong_ideal, 
                                        data = df_sbsa2_wide_pers_mod_age, 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando", group.equal = c("intercepts", "loadings"))
  eval(call("<-", as.name(paste0("lcs_", short_name, "_age_strong_ideal")), template_filled_strong_ideal))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_age_strong_ideal")), trait_age_fit_strong_ideal))
}
7.7.2.2 Current personality personality traits

Extraversion (current personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_extra_age_config_current, fit_lcs_extra_age_weak_current, fit_lcs_extra_age_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                 Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_extra_age_config_current 34 9057.7 9220.2 59.606                   
fit_lcs_extra_age_weak_current   36 9054.2 9207.7 60.144     0.5132       2
fit_lcs_extra_age_strong_current 42 9045.2 9171.5 63.069     2.9290       6
                                 Pr(>Chisq)
fit_lcs_extra_age_config_current           
fit_lcs_extra_age_weak_current       0.7737
fit_lcs_extra_age_strong_current     0.8177
# show model with varying latent change parameters 
# -> change parameter is "d_extra_1 ~1"
# -> main effect of age on T1 trait is "extra_t1 ~ age_z"
# -> moderation effect of age on change parameter is "d_extra_1 ~ age_z"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_age_lcs_extra_current <- broom::tidy(fit_lcs_extra_age_weak_current, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ", "extra_t1 ~ age_z", "d_extra_1 ~ age_z")) %>% arrange(label)
kable(params_age_lcs_extra_current, digits = 3) 
term label estimate std.all statistic p.value
d_extra_1 ~1 d_int_a 0.092 0.349 4.114 0.000
d_extra_1 ~1 d_int_b 0.090 0.320 3.648 0.000
extra_t1 ~ age_z main_a 0.024 0.039 0.668 0.504
extra_t1 ~ age_z main_b 0.044 0.078 1.199 0.231
d_extra_1 ~ age_z mod_a -0.044 -0.162 -1.853 0.064
d_extra_1 ~ age_z mod_b -0.023 -0.083 -1.225 0.220
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_extra_age_strong_current, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ", "extra_t1 ~ age_z", "d_extra_1 ~ age_z")) %>% arrange(label), digits = 3) 
term label estimate std.all statistic p.value
d_extra_1 ~1 d_int 0.090 0.342 5.215 0.000
d_extra_1 ~1 d_int 0.090 0.319 5.215 0.000
extra_t1 ~ age_z main 0.037 0.059 1.397 0.163
extra_t1 ~ age_z main 0.037 0.065 1.397 0.163
d_extra_1 ~ age_z mod -0.033 -0.122 -2.190 0.029
d_extra_1 ~ age_z mod -0.033 -0.120 -2.190 0.029
# model fit
kable(broom::glance(fit_lcs_extra_age_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 34 9054.245 9207.695 0.989 0.045 0.03

Slightly significant (at p < .05) moderation effect by age for extraversion but only in the constrained model. With older age, participants changed less in current-personality extraversion. No significant differences between intervention groups according to the LRTs.

Agreeableness (current personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_agree_age_config_current, fit_lcs_agree_age_weak_current, fit_lcs_agree_age_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                 Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_agree_age_config_current 34 7723.6 7886.1 29.232                   
fit_lcs_agree_age_weak_current   36 7720.7 7874.1 30.290    0.95091       2
fit_lcs_agree_age_strong_current 42 7710.8 7837.2 32.432    2.19265       6
                                 Pr(>Chisq)
fit_lcs_agree_age_config_current           
fit_lcs_agree_age_weak_current       0.6216
fit_lcs_agree_age_strong_current     0.9012
# show model with varying latent change parameters 
# -> change parameter is "d_agree_1 ~1"
# -> main effect of age on T1 trait is "agree_t1 ~ age_z"
# -> moderation effect of age on change parameter is "d_agree_1 ~ age_z"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_age_lcs_agree_current <- broom::tidy(fit_lcs_agree_age_weak_current, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ", "agree_t1 ~ age_z", "d_agree_1 ~ age_z")) %>% arrange(label)
kable(params_age_lcs_agree_current, digits = 3) 
term label estimate std.all statistic p.value
d_agree_1 ~1 d_int_a 0.025 0.125 1.442 0.149
d_agree_1 ~1 d_int_b 0.019 0.096 1.107 0.268
agree_t1 ~ age_z main_a 0.080 0.205 3.589 0.000
agree_t1 ~ age_z main_b 0.045 0.119 2.024 0.043
d_agree_1 ~ age_z mod_a -0.004 -0.017 -0.219 0.827
d_agree_1 ~ age_z mod_b 0.004 0.021 0.292 0.770
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_agree_age_strong_current, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ", "agree_t1 ~ age_z", "d_agree_1 ~ age_z")) %>% arrange(label), digits = 3) 
term label estimate std.all statistic p.value
d_agree_1 ~1 d_int 0.022 0.107 1.750 0.080
d_agree_1 ~1 d_int 0.022 0.111 1.750 0.080
agree_t1 ~ age_z main 0.062 0.159 3.863 0.000
agree_t1 ~ age_z main 0.062 0.162 3.863 0.000
d_agree_1 ~ age_z mod 0.000 -0.001 -0.023 0.982
d_agree_1 ~ age_z mod 0.000 -0.001 -0.023 0.982
# model fit
kable(broom::glance(fit_lcs_agree_age_strong_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 28 7710.809 7837.179 1 0 0.033

No significant moderation by age for agreeableness (similar in both groups). However, slight “main effect” of age on agreeableness at T1. No significant differences between intervention groups according to the LRTs.

Conscientiousness (current personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_consc_age_config_current, fit_lcs_consc_age_weak_current, fit_lcs_consc_age_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                 Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_consc_age_config_current 34 8206.4 8368.9 33.484                   
fit_lcs_consc_age_weak_current   36 8206.0 8359.4 37.061     3.8502       2
fit_lcs_consc_age_strong_current 42 8201.3 8327.7 44.392     7.2854       6
                                 Pr(>Chisq)
fit_lcs_consc_age_config_current           
fit_lcs_consc_age_weak_current       0.1459
fit_lcs_consc_age_strong_current     0.2953
# show model with varying latent change parameters 
# -> change parameter is "d_consc_1 ~1"
# -> main effect of age on T1 trait is "consc_t1 ~ age_z"
# -> moderation effect of age on change parameter is "d_consc_1 ~ age_z"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_age_lcs_consc_current <- broom::tidy(fit_lcs_consc_age_weak_current, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ", "consc_t1 ~ age_z", "d_consc_1 ~ age_z")) %>% arrange(label)
kable(params_age_lcs_consc_current, digits = 3) 
term label estimate std.all statistic p.value
d_consc_1 ~1 d_int_a 0.075 0.209 2.817 0.005
d_consc_1 ~1 d_int_b 0.100 0.249 3.566 0.000
consc_t1 ~ age_z main_a 0.194 0.272 4.918 0.000
consc_t1 ~ age_z main_b 0.186 0.256 3.931 0.000
d_consc_1 ~ age_z mod_a -0.004 -0.011 -0.175 0.861
d_consc_1 ~ age_z mod_b -0.032 -0.082 -1.357 0.175
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_consc_age_strong_current, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ", "consc_t1 ~ age_z", "d_consc_1 ~ age_z")) %>% arrange(label), digits = 3) 
term label estimate std.all statistic p.value
d_consc_1 ~1 d_int 0.087 0.241 4.446 0.000
d_consc_1 ~1 d_int 0.087 0.219 4.446 0.000
consc_t1 ~ age_z main 0.190 0.266 6.201 0.000
consc_t1 ~ age_z main 0.190 0.261 6.201 0.000
d_consc_1 ~ age_z mod -0.018 -0.049 -1.072 0.284
d_consc_1 ~ age_z mod -0.018 -0.047 -1.072 0.284
# model fit
kable(broom::glance(fit_lcs_consc_age_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 34 8205.978 8359.427 1 0.009 0.024

No significant moderation by age for conscientiousness (similar in both groups). Main effect of age on conscientiousness at T1. No significant differences according to the LRTs.

Neuroticism (current personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_neuro_age_config_current, fit_lcs_neuro_age_weak_current, fit_lcs_neuro_age_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                 Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_neuro_age_config_current 34 8687.2 8849.7 35.936                   
fit_lcs_neuro_age_weak_current   36 8684.2 8837.7 36.955     1.1455       2
fit_lcs_neuro_age_strong_current 42 8675.2 8801.6 39.988     3.0486       6
                                 Pr(>Chisq)
fit_lcs_neuro_age_config_current           
fit_lcs_neuro_age_weak_current       0.5640
fit_lcs_neuro_age_strong_current     0.8027
# show model with varying latent change parameters 
# -> change parameter is "d_neuro_1 ~1"
# -> main effect of age on T1 trait is "neuro_t1 ~ age_z"
# -> moderation effect of age on change parameter is "d_neuro_1 ~ age_z"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_age_lcs_neuro_current <- broom::tidy(fit_lcs_neuro_age_weak_current, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ", "neuro_t1 ~ age_z", "d_neuro_1 ~ age_z")) %>% arrange(label)
kable(params_age_lcs_neuro_current, digits = 3) 
term label estimate std.all statistic p.value
d_neuro_1 ~1 d_int_a -0.178 -0.475 -6.367 0.000
d_neuro_1 ~1 d_int_b -0.179 -0.390 -5.612 0.000
neuro_t1 ~ age_z main_a -0.082 -0.099 -1.710 0.087
neuro_t1 ~ age_z main_b -0.092 -0.112 -1.815 0.069
d_neuro_1 ~ age_z mod_a 0.031 0.079 1.129 0.259
d_neuro_1 ~ age_z mod_b -0.005 -0.012 -0.188 0.851
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_neuro_age_strong_current, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ", "neuro_t1 ~ age_z", "d_neuro_1 ~ age_z")) %>% arrange(label), digits = 3) 
term label estimate std.all statistic p.value
d_neuro_1 ~1 d_int -0.177 -0.474 -8.435 0.000
d_neuro_1 ~1 d_int -0.177 -0.385 -8.435 0.000
neuro_t1 ~ age_z main -0.090 -0.109 -2.585 0.010
neuro_t1 ~ age_z main -0.090 -0.110 -2.585 0.010
d_neuro_1 ~ age_z mod 0.014 0.035 0.693 0.488
d_neuro_1 ~ age_z mod 0.014 0.030 0.693 0.488
# model fit
kable(broom::glance(fit_lcs_neuro_age_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 34 8684.2 8837.65 1 0.009 0.023

No significant moderation by age for neuroticism in both groups. Slight main effect of age on neuroticism at T1. No significant differences according to the LRTs.

Openness (current personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_openn_age_config_current, fit_lcs_openn_age_weak_current, fit_lcs_openn_age_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                 Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_openn_age_config_current 34 8105.0 8267.5 35.171                   
fit_lcs_openn_age_weak_current   36 8108.4 8261.8 42.516      6.820       2
fit_lcs_openn_age_strong_current 42 8107.7 8234.1 53.853     11.283       6
                                 Pr(>Chisq)  
fit_lcs_openn_age_config_current             
fit_lcs_openn_age_weak_current      0.03304 *
fit_lcs_openn_age_strong_current    0.08003 .
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> change parameter is "d_openn_1 ~1"
# -> main effect of age on T1 trait is "openn_t1 ~ age_z"
# -> moderation effect of age on change parameter is "d_openn_1 ~ age_z"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_age_lcs_openn_current <- broom::tidy(fit_lcs_openn_age_weak_current, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ", "openn_t1 ~ age_z", "d_openn_1 ~ age_z")) %>% arrange(label)
kable(params_age_lcs_openn_current, digits = 3) 
term label estimate std.all statistic p.value
d_openn_1 ~1 d_int_a 0.076 0.312 3.376 0.001
d_openn_1 ~1 d_int_b 0.075 0.288 3.199 0.001
openn_t1 ~ age_z main_a 0.012 0.020 0.303 0.762
openn_t1 ~ age_z main_b 0.029 0.052 0.756 0.450
d_openn_1 ~ age_z mod_a 0.015 0.058 0.784 0.433
d_openn_1 ~ age_z mod_b -0.045 -0.175 -2.213 0.027
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_openn_age_strong_current, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ", "openn_t1 ~ age_z", "d_openn_1 ~ age_z")) %>% arrange(label), digits = 3) 
term label estimate std.all statistic p.value
d_openn_1 ~1 d_int 0.077 0.313 4.686 0.000
d_openn_1 ~1 d_int 0.077 0.296 4.686 0.000
openn_t1 ~ age_z main 0.021 0.033 0.751 0.452
openn_t1 ~ age_z main 0.021 0.038 0.751 0.452
d_openn_1 ~ age_z mod -0.015 -0.059 -1.089 0.276
d_openn_1 ~ age_z mod -0.015 -0.059 -1.089 0.276
# model fit
kable(broom::glance(fit_lcs_openn_age_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 34 8108.35 8261.8 0.997 0.023 0.036

Very slight (but significant at p < .05) moderation by age for current-personality openness in the self-improvement group only. No significant differences according to the LRTs, though. No main effects of age.

7.7.2.3 Ideal personality personality traits

Extraversion (ideal personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_extra_age_config_ideal, fit_lcs_extra_age_weak_ideal, fit_lcs_extra_age_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                               Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_extra_age_config_ideal 34 8029.1 8191.6 49.280                   
fit_lcs_extra_age_weak_ideal   36 8026.8 8180.2 50.964     1.4060       2
fit_lcs_extra_age_strong_ideal 42 8016.3 8142.7 52.524     1.5598       6
                               Pr(>Chisq)
fit_lcs_extra_age_config_ideal           
fit_lcs_extra_age_weak_ideal       0.4951
fit_lcs_extra_age_strong_ideal     0.9554
# show model with varying latent change parameters 
# -> change parameter is "d_extra_1 ~1"
# -> main effect of age on T1 trait is "extra_t1 ~ age_z"
# -> moderation effect of age on change parameter is "d_extra_1 ~ age_z"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_age_lcs_extra_ideal <- broom::tidy(fit_lcs_extra_age_weak_ideal, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ", "extra_t1 ~ age_z", "d_extra_1 ~ age_z")) %>% arrange(label)
kable(params_age_lcs_extra_ideal, digits = 3) 
term label estimate std.all statistic p.value
d_extra_1 ~1 d_int_a -0.016 -0.063 -0.672 0.502
d_extra_1 ~1 d_int_b -0.022 -0.089 -0.976 0.329
extra_t1 ~ age_z main_a 0.003 0.008 0.142 0.887
extra_t1 ~ age_z main_b 0.005 0.013 0.168 0.867
d_extra_1 ~ age_z mod_a -0.046 -0.183 -2.162 0.031
d_extra_1 ~ age_z mod_b -0.027 -0.112 -1.236 0.216
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_extra_age_strong_ideal, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ", "extra_t1 ~ age_z", "d_extra_1 ~ age_z")) %>% arrange(label), digits = 3) 
term label estimate std.all statistic p.value
d_extra_1 ~1 d_int -0.019 -0.079 -1.193 0.233
d_extra_1 ~1 d_int -0.019 -0.077 -1.193 0.233
extra_t1 ~ age_z main 0.004 0.010 0.204 0.838
extra_t1 ~ age_z main 0.004 0.010 0.204 0.838
d_extra_1 ~ age_z mod -0.036 -0.144 -2.357 0.018
d_extra_1 ~ age_z mod -0.036 -0.149 -2.357 0.018
# model fit
kable(broom::glance(fit_lcs_extra_age_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 34 8026.766 8180.216 0.986 0.035 0.042

Very slight (but significant at p < .05) moderation by age for ideal-personality extraversion in the self-acceptance group and in the constrained model. However, no significant differences according to the LRTs.

Agreeableness (ideal personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_agree_age_config_ideal, fit_lcs_agree_age_weak_ideal, fit_lcs_agree_age_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                               Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_agree_age_config_ideal 34 7711.3 7873.8 43.810                   
fit_lcs_agree_age_weak_ideal   36 7707.8 7861.2 44.254     0.4518       2
fit_lcs_agree_age_strong_ideal 42 7699.2 7825.6 47.691     3.4628       6
                               Pr(>Chisq)
fit_lcs_agree_age_config_ideal           
fit_lcs_agree_age_weak_ideal       0.7978
fit_lcs_agree_age_strong_ideal     0.7489
# show model with varying latent change parameters 
# -> change parameter is "d_agree_1 ~1"
# -> main effect of age on T1 trait is "agree_t1 ~ age_z"
# -> moderation effect of age on change parameter is "d_agree_1 ~ age_z"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_age_lcs_agree_ideal <- broom::tidy(fit_lcs_agree_age_weak_ideal, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ", "agree_t1 ~ age_z", "d_agree_1 ~ age_z")) %>% arrange(label)
kable(params_age_lcs_agree_ideal, digits = 3) 
term label estimate std.all statistic p.value
d_agree_1 ~1 d_int_a 0.006 0.020 0.247 0.805
d_agree_1 ~1 d_int_b -0.030 -0.113 -1.368 0.171
agree_t1 ~ age_z main_a 0.064 0.135 2.404 0.016
agree_t1 ~ age_z main_b 0.099 0.234 4.123 0.000
d_agree_1 ~ age_z mod_a 0.019 0.066 0.863 0.388
d_agree_1 ~ age_z mod_b -0.005 -0.018 -0.208 0.836
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_agree_age_strong_ideal, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ", "agree_t1 ~ age_z", "d_agree_1 ~ age_z")) %>% arrange(label), digits = 3) 
term label estimate std.all statistic p.value
d_agree_1 ~1 d_int -0.013 -0.045 -0.811 0.417
d_agree_1 ~1 d_int -0.013 -0.048 -0.811 0.417
agree_t1 ~ age_z main 0.083 0.174 4.538 0.000
agree_t1 ~ age_z main 0.083 0.198 4.538 0.000
d_agree_1 ~ age_z mod 0.007 0.024 0.445 0.657
d_agree_1 ~ age_z mod 0.007 0.027 0.445 0.657
# model fit
kable(broom::glance(fit_lcs_agree_age_strong_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 28 7699.221 7825.592 0.996 0.02 0.037

No significant moderation by age for ideal-personality agreeableness (similar in both groups). Main effect of age on agreeableness at T1. No significant group differences according to LRTs.

Conscientiousness (ideal personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_consc_age_config_ideal, fit_lcs_consc_age_weak_ideal, fit_lcs_consc_age_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                               Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_consc_age_config_ideal 34 6930.6 7093.0 30.550                   
fit_lcs_consc_age_weak_ideal   36 6926.7 7080.2 30.698    0.12687       2
fit_lcs_consc_age_strong_ideal 42 6917.1 7043.5 33.109    2.50120       6
                               Pr(>Chisq)
fit_lcs_consc_age_config_ideal           
fit_lcs_consc_age_weak_ideal       0.9385
fit_lcs_consc_age_strong_ideal     0.8683
# show model with varying latent change parameters 
# -> change parameter is "d_consc_1 ~1"
# -> main effect of age on T1 trait is "consc_t1 ~ age_z"
# -> moderation effect of age on change parameter is "d_consc_1 ~ age_z"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_age_lcs_consc_ideal <- broom::tidy(fit_lcs_consc_age_weak_ideal, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ", "consc_t1 ~ age_z", "d_consc_1 ~ age_z")) %>% arrange(label)
kable(params_age_lcs_consc_ideal, digits = 3) 
term label estimate std.all statistic p.value
d_consc_1 ~1 d_int_a 0.026 0.085 1.142 0.254
d_consc_1 ~1 d_int_b 0.010 0.036 0.441 0.659
consc_t1 ~ age_z main_a 0.027 0.059 1.046 0.296
consc_t1 ~ age_z main_b 0.052 0.132 2.266 0.023
d_consc_1 ~ age_z mod_a 0.001 0.004 0.057 0.954
d_consc_1 ~ age_z mod_b -0.001 -0.006 -0.071 0.943
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_consc_age_strong_ideal, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ", "consc_t1 ~ age_z", "d_consc_1 ~ age_z")) %>% arrange(label), digits = 3) 
term label estimate std.all statistic p.value
d_consc_1 ~1 d_int 0.017 0.056 1.101 0.271
d_consc_1 ~1 d_int 0.017 0.065 1.101 0.271
consc_t1 ~ age_z main 0.041 0.090 2.371 0.018
consc_t1 ~ age_z main 0.041 0.103 2.371 0.018
d_consc_1 ~ age_z mod -0.001 -0.002 -0.049 0.961
d_consc_1 ~ age_z mod -0.001 -0.003 -0.049 0.961
# model fit
kable(broom::glance(fit_lcs_consc_age_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 34 6926.71 7080.16 1 0 0.026

No significant moderation by age for ideal-personality conscientiousness (similar in both groups). No significant differences according to the LRTs.

Neuroticism (ideal personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_neuro_age_config_ideal, fit_lcs_neuro_age_weak_ideal, fit_lcs_neuro_age_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                               Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_neuro_age_config_ideal 34 7153.2 7315.7 34.914                   
fit_lcs_neuro_age_weak_ideal   36 7154.9 7308.4 40.614     4.4858       2
fit_lcs_neuro_age_strong_ideal 42 7145.5 7271.9 43.221     2.6711       6
                               Pr(>Chisq)
fit_lcs_neuro_age_config_ideal           
fit_lcs_neuro_age_weak_ideal       0.1062
fit_lcs_neuro_age_strong_ideal     0.8489
# show model with varying latent change parameters 
# -> change parameter is "d_neuro_1 ~1"
# -> main effect of age on T1 trait is "neuro_t1 ~ age_z"
# -> moderation effect of age on change parameter is "d_neuro_1 ~ age_z"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_age_lcs_neuro_ideal <- broom::tidy(fit_lcs_neuro_age_weak_ideal, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ", "neuro_t1 ~ age_z", "d_neuro_1 ~ age_z")) %>% arrange(label)
kable(params_age_lcs_neuro_ideal, digits = 3) 
term label estimate std.all statistic p.value
d_neuro_1 ~1 d_int_a -0.003 -0.010 -0.125 0.900
d_neuro_1 ~1 d_int_b 0.045 0.119 1.606 0.108
neuro_t1 ~ age_z main_a -0.057 -0.107 -1.900 0.057
neuro_t1 ~ age_z main_b -0.085 -0.186 -3.379 0.001
d_neuro_1 ~ age_z mod_a 0.031 0.090 1.158 0.247
d_neuro_1 ~ age_z mod_b 0.046 0.127 1.752 0.080
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_neuro_age_strong_ideal, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ", "neuro_t1 ~ age_z", "d_neuro_1 ~ age_z")) %>% arrange(label), digits = 3) 
term label estimate std.all statistic p.value
d_neuro_1 ~1 d_int 0.020 0.060 1.038 0.299
d_neuro_1 ~1 d_int 0.020 0.054 1.038 0.299
neuro_t1 ~ age_z main -0.073 -0.136 -3.767 0.000
neuro_t1 ~ age_z main -0.073 -0.161 -3.767 0.000
d_neuro_1 ~ age_z mod 0.039 0.112 2.073 0.038
d_neuro_1 ~ age_z mod 0.039 0.107 2.073 0.038
# model fit
kable(broom::glance(fit_lcs_neuro_age_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 34 7154.903 7308.353 0.997 0.02 0.036

Slight moderation effect (significant at p < .05) by age for ideal-personality neuroticism. Only significant in the constrained model. No significant group differences according to the LRTs.

Openness (ideal personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_openn_age_config_ideal, fit_lcs_openn_age_weak_ideal, fit_lcs_openn_age_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                               Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_openn_age_config_ideal 34 7869.4 8031.9 64.935                   
fit_lcs_openn_age_weak_ideal   36 7866.0 8019.5 65.559     0.5366       2
fit_lcs_openn_age_strong_ideal 42 7859.6 7986.0 71.141     6.0840       6
                               Pr(>Chisq)
fit_lcs_openn_age_config_ideal           
fit_lcs_openn_age_weak_ideal       0.7647
fit_lcs_openn_age_strong_ideal     0.4138
# show model with varying latent change parameters 
# -> change parameter is "d_openn_1 ~1"
# -> main effect of age on T1 trait is "openn_t1 ~ age_z"
# -> moderation effect of age on change parameter is "d_openn_1 ~ age_z"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_age_lcs_openn_ideal <- broom::tidy(fit_lcs_openn_age_weak_ideal, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ", "openn_t1 ~ age_z", "d_openn_1 ~ age_z")) %>% arrange(label)
kable(params_age_lcs_openn_ideal, digits = 3) 
term label estimate std.all statistic p.value
d_openn_1 ~1 d_int_a 0.015 0.072 0.933 0.351
d_openn_1 ~1 d_int_b 0.016 0.109 1.119 0.263
openn_t1 ~ age_z main_a -0.001 -0.004 -0.078 0.938
openn_t1 ~ age_z main_b 0.032 0.110 1.904 0.057
d_openn_1 ~ age_z mod_a -0.007 -0.032 -0.498 0.619
d_openn_1 ~ age_z mod_b -0.017 -0.116 -1.357 0.175
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_openn_age_strong_ideal, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ", "openn_t1 ~ age_z", "d_openn_1 ~ age_z")) %>% arrange(label), digits = 3) 
term label estimate std.all statistic p.value
d_openn_1 ~1 d_int 0.016 0.074 1.467 0.142
d_openn_1 ~1 d_int 0.016 0.108 1.467 0.142
openn_t1 ~ age_z main 0.016 0.052 1.319 0.187
openn_t1 ~ age_z main 0.016 0.057 1.319 0.187
d_openn_1 ~ age_z mod -0.013 -0.058 -1.384 0.166
d_openn_1 ~ age_z mod -0.013 -0.090 -1.384 0.166
# model fit
kable(broom::glance(fit_lcs_openn_age_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
674 34 7866.015 8019.465 0.978 0.049 0.043

No significant moderation by age for ideal-personality openness (similar in both groups). No significant differences according to the LRTs.

7.7.2.4 Summary of latent main and moderation effects of linear age
Show the code
params_age_summary <- bind_rows(
  params_age_lcs_extra_current %>% mutate(trait = names(b5_vars)[1], self = "current") %>% filter(str_detect(label, "m")==T) %>% select(trait, self, group = label, beta = std.all, p.value),
  params_age_lcs_extra_ideal %>% mutate(trait = names(b5_vars)[1], self = "ideal") %>% filter(str_detect(label, "m")==T) %>% select(trait, self, group = label, beta = std.all, p.value),
  params_age_lcs_agree_current %>% mutate(trait = names(b5_vars)[2], self = "current") %>% filter(str_detect(label, "m")==T) %>% select(trait, self, group = label, beta = std.all, p.value),
  params_age_lcs_agree_ideal %>% mutate(trait = names(b5_vars)[2], self = "ideal") %>% filter(str_detect(label, "m")==T) %>% select(trait, self, group = label, beta = std.all, p.value),
  params_age_lcs_consc_current %>% mutate(trait = names(b5_vars)[3], self = "current") %>% filter(str_detect(label, "m")==T) %>% select(trait, self, group = label, beta = std.all, p.value),
  params_age_lcs_consc_ideal %>% mutate(trait = names(b5_vars)[3], self = "ideal") %>% filter(str_detect(label, "m")==T) %>% select(trait, self, group = label, beta = std.all, p.value),
  params_age_lcs_neuro_current %>% mutate(trait = names(b5_vars)[4], self = "current") %>% filter(str_detect(label, "m")==T) %>% select(trait, self, group = label, beta = std.all, p.value),
  params_age_lcs_neuro_ideal %>% mutate(trait = names(b5_vars)[4], self = "ideal") %>% filter(str_detect(label, "m")==T) %>% select(trait, self, group = label, beta = std.all, p.value),
  params_age_lcs_openn_current %>% mutate(trait = names(b5_vars)[5], self = "current") %>% filter(str_detect(label, "m")==T) %>% select(trait, self, group = label, beta = std.all, p.value),
  params_age_lcs_openn_ideal %>% mutate(trait = names(b5_vars)[5], self = "ideal") %>% filter(str_detect(label, "m")==T) %>% select(trait, self, group = label, beta = std.all, p.value)
) 

kable(params_age_summary, digits = 3)
trait self group beta p.value
extraversion current main_a 0.039 0.504
extraversion current main_b 0.078 0.231
extraversion current mod_a -0.162 0.064
extraversion current mod_b -0.083 0.220
extraversion ideal main_a 0.008 0.887
extraversion ideal main_b 0.013 0.867
extraversion ideal mod_a -0.183 0.031
extraversion ideal mod_b -0.112 0.216
agreeableness current main_a 0.205 0.000
agreeableness current main_b 0.119 0.043
agreeableness current mod_a -0.017 0.827
agreeableness current mod_b 0.021 0.770
agreeableness ideal main_a 0.135 0.016
agreeableness ideal main_b 0.234 0.000
agreeableness ideal mod_a 0.066 0.388
agreeableness ideal mod_b -0.018 0.836
conscientiousness current main_a 0.272 0.000
conscientiousness current main_b 0.256 0.000
conscientiousness current mod_a -0.011 0.861
conscientiousness current mod_b -0.082 0.175
conscientiousness ideal main_a 0.059 0.296
conscientiousness ideal main_b 0.132 0.023
conscientiousness ideal mod_a 0.004 0.954
conscientiousness ideal mod_b -0.006 0.943
neuroticism current main_a -0.099 0.087
neuroticism current main_b -0.112 0.069
neuroticism current mod_a 0.079 0.259
neuroticism current mod_b -0.012 0.851
neuroticism ideal main_a -0.107 0.057
neuroticism ideal main_b -0.186 0.001
neuroticism ideal mod_a 0.090 0.247
neuroticism ideal mod_b 0.127 0.080
openness current main_a 0.020 0.762
openness current main_b 0.052 0.450
openness current mod_a 0.058 0.433
openness current mod_b -0.175 0.027
openness ideal main_a -0.004 0.938
openness ideal main_b 0.110 0.057
openness ideal mod_a -0.032 0.619
openness ideal mod_b -0.116 0.175

Very few significant moderation effects (at p < .05): extraversion (ideal - acceptance group), neuroticism (ideal - in constrained model), openness (current - improvement group). Overall, not consistent with Study 1 results.
Plus a few main effects of age (at T1) in either intervention group.

7.7.3 Moderation analysis: age group split

Now that we saw that the two intervention groups did not really differ in terms of linear moderation effects, let’s see whether perhaps across the whole sample we can find differences in two age groups (-> in multigroup SEM of latent change score).

Split age by age 30: roughly the sample mean and consistent with findings by Miller on age differences

df_sbsa2_wide_pers_mod_age_split <- df_sbsa2 %>% 
  arrange(pid, time) %>% 
  mutate(age_d = ifelse(age <= 30, "young", "old")) %>% 
  group_by(pid) %>% slice_head(n=1) %>% ungroup() %>% 
  select(pid, age_d)

df_sbsa2_wide_pers_mod_age_split <- df_sbsa2_wide_pers %>% left_join(group_assign) %>% 
  left_join(df_sbsa2_wide_pers_mod_age_split) %>% 
  filter(!is.na(age_d))
7.7.3.1 Run models
Show the code
# create templates: we can use the same templates as above just with different group composition (split by age_d variable)

# loop across 5 traits
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # configural - current
  template_filled_config_current <- str_replace_all(trait_template_main_config, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_agesplit_fit_config_current <- lavaan(template_filled_config_current, 
                                          data = df_sbsa2_wide_pers_mod_age_split, 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "age_d")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_agesplit_config_current")), template_filled_config_current))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_agesplit_config_current")), trait_agesplit_fit_config_current))
  # configural - ideal
  template_filled_config_ideal <- str_replace_all(trait_template_main_config, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_agesplit_fit_config_ideal <- lavaan(template_filled_config_ideal, 
                                        data = df_sbsa2_wide_pers_mod_age_split, 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "age_d")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_agesplit_config_ideal")), template_filled_config_ideal))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_agesplit_config_ideal")), trait_agesplit_fit_config_ideal))
  # weak - current
  template_filled_weak_current <- str_replace_all(trait_template_main_weak, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_agesplit_fit_weak_current <- lavaan(template_filled_weak_current, 
                                          data = df_sbsa2_wide_pers_mod_age_split, 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "age_d", group.equal = "loadings")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_agesplit_weak_current")), template_filled_weak_current))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_agesplit_weak_current")), trait_agesplit_fit_weak_current))
  # weak - ideal
  template_filled_weak_ideal <- str_replace_all(trait_template_main_weak, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_agesplit_fit_weak_ideal <- lavaan(template_filled_weak_ideal, 
                                        data = df_sbsa2_wide_pers_mod_age_split, 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "age_d", group.equal = "loadings")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_agesplit_weak_ideal")), template_filled_weak_ideal))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_agesplit_weak_ideal")), trait_agesplit_fit_weak_ideal))
  # strong - current
  template_filled_strong_current <- str_replace_all(trait_template_main_strong, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_agesplit_fit_strong_current <- lavaan(template_filled_strong_current, 
                                          data = df_sbsa2_wide_pers_mod_age_split, 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "age_d", group.equal = c("intercepts", "loadings"))
  eval(call("<-", as.name(paste0("lcs_", short_name, "_agesplit_strong_current")), template_filled_strong_current))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_agesplit_strong_current")), trait_agesplit_fit_strong_current))
  # strong - ideal
  template_filled_strong_ideal <- str_replace_all(trait_template_main_strong, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_agesplit_fit_strong_ideal <- lavaan(template_filled_strong_ideal, 
                                        data = df_sbsa2_wide_pers_mod_age_split, 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "age_d", group.equal = c("intercepts", "loadings"))
  eval(call("<-", as.name(paste0("lcs_", short_name, "_agesplit_strong_ideal")), template_filled_strong_ideal))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_agesplit_strong_ideal")), trait_agesplit_fit_strong_ideal))
}
7.7.3.2 Current personality personality traits

Extraversion (current personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_extra_agesplit_config_current, fit_lcs_extra_agesplit_weak_current, fit_lcs_extra_agesplit_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                      Df    AIC    BIC Chisq Chisq diff Df diff
fit_lcs_extra_agesplit_config_current 24 8920.2 9062.5 66.15                   
fit_lcs_extra_agesplit_weak_current   26 8924.0 9056.8 73.94     8.1090       2
fit_lcs_extra_agesplit_strong_current 30 8925.1 9038.9 83.07     9.2066       4
                                      Pr(>Chisq)  
fit_lcs_extra_agesplit_config_current             
fit_lcs_extra_agesplit_weak_current      0.01734 *
fit_lcs_extra_agesplit_strong_current    0.05614 .
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> key parameter is "d_extra_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = old, b = young)
params_agesplit_lcs_extra_current <- broom::tidy(fit_lcs_extra_agesplit_weak_current, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 "))
kable(params_agesplit_lcs_extra_current, digits = 3) 
term label estimate std.all statistic p.value
d_extra_1 ~1 d_int_a 0.045 0.190 2.131 0.033
d_extra_1 ~1 d_int_b 0.116 0.391 5.552 0.000
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_extra_agesplit_strong_current, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_extra_1 ~1 d_int 0.083 0.347 5.28 0
d_extra_1 ~1 d_int 0.083 0.279 5.28 0
# model fit
kable(broom::glance(fit_lcs_extra_agesplit_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
848 28 8923.955 9056.755 0.984 0.066 0.038

Similar change in extraversion in both groups (somewhat stronger in younger group!). No significant differences in latent change score according to the LRTs (2nd test).

Agreeableness (current personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_agree_agesplit_config_current, fit_lcs_agree_agesplit_weak_current, fit_lcs_agree_agesplit_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                      Df    AIC    BIC  Chisq Chisq diff
fit_lcs_agree_agesplit_config_current 24 7311.0 7453.3 22.194           
fit_lcs_agree_agesplit_weak_current   26 7307.4 7440.2 22.622     0.4042
fit_lcs_agree_agesplit_strong_current 30 7322.1 7435.9 45.286    21.7115
                                      Df diff Pr(>Chisq)    
fit_lcs_agree_agesplit_config_current                       
fit_lcs_agree_agesplit_weak_current         2  0.8170272    
fit_lcs_agree_agesplit_strong_current       4  0.0002287 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> key parameter is "d_agree_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = old, b = young)
params_agesplit_lcs_agree_current <- broom::tidy(fit_lcs_agree_agesplit_weak_current, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 "))
kable(params_agesplit_lcs_agree_current, digits = 3) 
term label estimate std.all statistic p.value
d_agree_1 ~1 d_int_a 0.035 0.172 2.194 0.028
d_agree_1 ~1 d_int_b 0.026 0.142 1.806 0.071
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_agree_agesplit_strong_current, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_agree_1 ~1 d_int 0.032 0.158 2.888 0.004
d_agree_1 ~1 d_int 0.032 0.177 2.888 0.004
# model fit
kable(broom::glance(fit_lcs_agree_agesplit_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
848 28 7307.404 7440.205 1 0 0.022

Very similar change in agreeableness in both groups. No significant differences according to the LRTs.

Conscientiousness (current personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_consc_agesplit_config_current, fit_lcs_consc_agesplit_weak_current, fit_lcs_consc_agesplit_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                      Df    AIC    BIC  Chisq Chisq diff
fit_lcs_consc_agesplit_config_current 24 7855.1 7997.4 32.286           
fit_lcs_consc_agesplit_weak_current   26 7852.2 7985.0 33.341      1.048
fit_lcs_consc_agesplit_strong_current 30 7878.8 7992.6 67.920     33.473
                                      Df diff Pr(>Chisq)    
fit_lcs_consc_agesplit_config_current                       
fit_lcs_consc_agesplit_weak_current         2     0.5923    
fit_lcs_consc_agesplit_strong_current       4  9.559e-07 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> key parameter is "d_consc_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = old, b = young)
params_agesplit_lcs_consc_current <- broom::tidy(fit_lcs_consc_agesplit_weak_current, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 "))
kable(params_agesplit_lcs_consc_current, digits = 3) 
term label estimate std.all statistic p.value
d_consc_1 ~1 d_int_a 0.079 0.222 3.006 0.003
d_consc_1 ~1 d_int_b 0.100 0.251 4.344 0.000
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_consc_agesplit_strong_current, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_consc_1 ~1 d_int 0.092 0.260 5.133 0
d_consc_1 ~1 d_int 0.092 0.231 5.133 0
# model fit
kable(broom::glance(fit_lcs_consc_agesplit_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
848 28 7852.204 7985.005 0.998 0.026 0.018

Similar change in conscientiousness in both groups (slightly stronger change in younger group). LRT indicates significant group differences in latent change score.

Neuroticism (current personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_neuro_agesplit_config_current, fit_lcs_neuro_agesplit_weak_current, fit_lcs_neuro_agesplit_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                      Df    AIC    BIC  Chisq Chisq diff
fit_lcs_neuro_agesplit_config_current 24 8465.5 8607.8 17.904           
fit_lcs_neuro_agesplit_weak_current   26 8461.6 8594.4 17.972     0.0791
fit_lcs_neuro_agesplit_strong_current 30 8470.2 8584.0 34.624    16.7013
                                      Df diff Pr(>Chisq)   
fit_lcs_neuro_agesplit_config_current                      
fit_lcs_neuro_agesplit_weak_current         2   0.961231   
fit_lcs_neuro_agesplit_strong_current       4   0.002209 **
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> key parameter is "d_neuro_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = old, b = young)
params_agesplit_lcs_neuro_current <- broom::tidy(fit_lcs_neuro_agesplit_weak_current, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 "))
kable(params_agesplit_lcs_neuro_current, digits = 3) 
term label estimate std.all statistic p.value
d_neuro_1 ~1 d_int_a -0.147 -0.348 -4.752 0
d_neuro_1 ~1 d_int_b -0.179 -0.428 -7.436 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_neuro_agesplit_strong_current, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_neuro_1 ~1 d_int -0.167 -0.396 -8.722 0
d_neuro_1 ~1 d_int -0.167 -0.399 -8.722 0
# model fit
kable(broom::glance(fit_lcs_neuro_agesplit_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
848 28 8461.566 8594.366 1 0 0.014

Relatively similar change in neuroticism in both groups (slightly stronger change in younger group). LRT indicates significant group differences in latent change score.

Openness (current personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_openn_agesplit_config_current, fit_lcs_openn_agesplit_weak_current, fit_lcs_openn_agesplit_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                      Df    AIC    BIC  Chisq Chisq diff
fit_lcs_openn_agesplit_config_current 24 7662.8 7805.1 27.182           
fit_lcs_openn_agesplit_weak_current   26 7665.8 7798.6 34.187     6.3328
fit_lcs_openn_agesplit_strong_current 30 7665.9 7779.8 42.294     7.8423
                                      Df diff Pr(>Chisq)  
fit_lcs_openn_agesplit_config_current                     
fit_lcs_openn_agesplit_weak_current         2    0.04215 *
fit_lcs_openn_agesplit_strong_current       4    0.09753 .
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> key parameter is "d_openn_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = old, b = young)
params_agesplit_lcs_openn_current <- broom::tidy(fit_lcs_openn_agesplit_weak_current, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 "))
kable(params_agesplit_lcs_openn_current, digits = 3) 
term label estimate std.all statistic p.value
d_openn_1 ~1 d_int_a 0.041 0.176 1.928 0.054
d_openn_1 ~1 d_int_b 0.082 0.298 4.179 0.000
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_openn_agesplit_strong_current, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_openn_1 ~1 d_int 0.063 0.270 4.302 0
d_openn_1 ~1 d_int 0.063 0.226 4.302 0
# model fit
kable(broom::glance(fit_lcs_openn_agesplit_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
848 28 7665.824 7798.624 0.997 0.027 0.032

Relatively similar change in openness in both groups (slightly stronger change in younger group). LRT indicates no significant group differences in latent change score, however.

7.7.3.3 Ideal personality personality traits

Extraversion (ideal personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_extra_agesplit_config_ideal, fit_lcs_extra_agesplit_weak_ideal, fit_lcs_extra_agesplit_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                    Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_extra_agesplit_config_ideal 24 7769.2 7911.4 19.640                   
fit_lcs_extra_agesplit_weak_ideal   26 7765.4 7898.2 19.899     0.2298       2
fit_lcs_extra_agesplit_strong_ideal 30 7767.1 7880.9 29.565     9.8005       4
                                    Pr(>Chisq)  
fit_lcs_extra_agesplit_config_ideal             
fit_lcs_extra_agesplit_weak_ideal      0.89147  
fit_lcs_extra_agesplit_strong_ideal    0.04393 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> key parameter is "d_extra_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = old, b = young)
params_agesplit_lcs_extra_ideal <- broom::tidy(fit_lcs_extra_agesplit_weak_ideal, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 "))
kable(params_agesplit_lcs_extra_ideal, digits = 3) 
term label estimate std.all statistic p.value
d_extra_1 ~1 d_int_a -0.042 -0.180 -1.963 0.050
d_extra_1 ~1 d_int_b -0.002 -0.007 -0.091 0.928
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_extra_agesplit_strong_ideal, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_extra_1 ~1 d_int -0.019 -0.080 -1.35 0.177
d_extra_1 ~1 d_int -0.019 -0.081 -1.35 0.177
# model fit
kable(broom::glance(fit_lcs_extra_agesplit_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
848 28 7765.423 7898.223 1 0 0.024

More pronounced change in ideal-personality extraversion in older group. Significant difference in latent change score according to LRT.

Agreeableness (ideal personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_agree_agesplit_config_ideal, fit_lcs_agree_agesplit_weak_ideal, fit_lcs_agree_agesplit_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                    Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_agree_agesplit_config_ideal 24 7296.5 7438.8 36.708                   
fit_lcs_agree_agesplit_weak_ideal   26 7298.2 7431.0 42.385     5.1777       2
fit_lcs_agree_agesplit_strong_ideal 30 7319.6 7433.4 71.817    28.0309       4
                                    Pr(>Chisq)    
fit_lcs_agree_agesplit_config_ideal               
fit_lcs_agree_agesplit_weak_ideal      0.07511 .  
fit_lcs_agree_agesplit_strong_ideal  1.229e-05 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> key parameter is "d_agree_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = old, b = young)
params_agesplit_lcs_agree_ideal <- broom::tidy(fit_lcs_agree_agesplit_weak_ideal, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 "))
kable(params_agesplit_lcs_agree_ideal, digits = 3) 
term label estimate std.all statistic p.value
d_agree_1 ~1 d_int_a -0.013 -0.045 -0.568 0.570
d_agree_1 ~1 d_int_b -0.013 -0.045 -0.701 0.483
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_agree_agesplit_strong_ideal, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_agree_1 ~1 d_int -0.013 -0.045 -0.884 0.377
d_agree_1 ~1 d_int -0.013 -0.045 -0.884 0.377
# model fit
kable(broom::glance(fit_lcs_agree_agesplit_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
848 28 7298.175 7430.975 0.992 0.039 0.035

Almost the same change in ideal-personality agreeableness in both groups. LRT indicates some significant difference but this must be because of another parameter (main effect?).

Conscientiousness (ideal personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_consc_agesplit_config_ideal, fit_lcs_consc_agesplit_weak_ideal, fit_lcs_consc_agesplit_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                    Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_consc_agesplit_config_ideal 24 6240.8 6383.1 32.891                   
fit_lcs_consc_agesplit_weak_ideal   26 6239.2 6372.0 35.345     2.0727       2
fit_lcs_consc_agesplit_strong_ideal 30 6239.8 6353.6 43.898     7.9806       4
                                    Pr(>Chisq)  
fit_lcs_consc_agesplit_config_ideal             
fit_lcs_consc_agesplit_weak_ideal      0.35474  
fit_lcs_consc_agesplit_strong_ideal    0.09229 .
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> key parameter is "d_consc_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = old, b = young)
params_agesplit_lcs_consc_ideal <- broom::tidy(fit_lcs_consc_agesplit_weak_ideal, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 "))
kable(params_agesplit_lcs_consc_ideal, digits = 3) 
term label estimate std.all statistic p.value
d_consc_1 ~1 d_int_a -0.002 -0.006 -0.084 0.933
d_consc_1 ~1 d_int_b 0.012 0.039 0.625 0.532
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_consc_agesplit_strong_ideal, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_consc_1 ~1 d_int 0.007 0.023 0.451 0.652
d_consc_1 ~1 d_int 0.007 0.021 0.451 0.652
# model fit
kable(broom::glance(fit_lcs_consc_agesplit_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
848 28 6239.246 6372.046 0.996 0.029 0.032

Very similar change in ideal-personality conscientiousness in both groups. No significant differences according to the LRTs.

Neuroticism (ideal personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_neuro_agesplit_config_ideal, fit_lcs_neuro_agesplit_weak_ideal, fit_lcs_neuro_agesplit_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                    Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_neuro_agesplit_config_ideal 24 6591.7 6734.0 35.789                   
fit_lcs_neuro_agesplit_weak_ideal   26 6594.9 6727.7 43.048     4.9346       2
fit_lcs_neuro_agesplit_strong_ideal 30 6600.6 6714.4 56.714    13.4224       4
                                    Pr(>Chisq)   
fit_lcs_neuro_agesplit_config_ideal              
fit_lcs_neuro_agesplit_weak_ideal     0.084812 . 
fit_lcs_neuro_agesplit_strong_ideal   0.009386 **
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> key parameter is "d_neuro_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = old, b = young)
params_agesplit_lcs_neuro_ideal <- broom::tidy(fit_lcs_neuro_agesplit_weak_ideal, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 "))
kable(params_agesplit_lcs_neuro_ideal, digits = 3) 
term label estimate std.all statistic p.value
d_neuro_1 ~1 d_int_a 0.047 0.154 1.842 0.065
d_neuro_1 ~1 d_int_b 0.007 0.020 0.316 0.752
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_neuro_agesplit_strong_ideal, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_neuro_1 ~1 d_int 0.023 0.076 1.419 0.156
d_neuro_1 ~1 d_int 0.023 0.067 1.419 0.156
# model fit
kable(broom::glance(fit_lcs_neuro_agesplit_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
848 28 6594.945 6727.746 0.991 0.039 0.041

More pronounced change in ideal-personality neuroticism in older group (but also not significant on its own). Significant difference in latent change score according to LRT.

Openness (ideal personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_openn_agesplit_config_ideal, fit_lcs_openn_agesplit_weak_ideal, fit_lcs_openn_agesplit_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                    Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_openn_agesplit_config_ideal 24 7385.6 7527.8 47.160                   
fit_lcs_openn_agesplit_weak_ideal   26 7381.7 7514.5 47.306     0.1209       2
fit_lcs_openn_agesplit_strong_ideal 30 7385.1 7499.0 58.728    10.8469       4
                                    Pr(>Chisq)  
fit_lcs_openn_agesplit_config_ideal             
fit_lcs_openn_agesplit_weak_ideal      0.94133  
fit_lcs_openn_agesplit_strong_ideal    0.02834 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> key parameter is "d_openn_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = old, b = young)
params_agesplit_lcs_openn_ideal <- broom::tidy(fit_lcs_openn_agesplit_weak_ideal, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 "))
kable(params_agesplit_lcs_openn_ideal, digits = 3) 
term label estimate std.all statistic p.value
d_openn_1 ~1 d_int_a 0.012 0.066 0.817 0.414
d_openn_1 ~1 d_int_b 0.018 0.110 1.477 0.140
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_openn_agesplit_strong_ideal, conf.int = TRUE, conf.level = 0.999) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_openn_1 ~1 d_int 0.015 0.088 1.683 0.092
d_openn_1 ~1 d_int 0.015 0.095 1.683 0.092
# model fit
kable(broom::glance(fit_lcs_openn_agesplit_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
848 28 7381.703 7514.504 0.988 0.044 0.03

Similar change in ideal-personality openness in both age groups (slightly stronger in younger group). LRT indicates significant difference (not sure why).

7.7.3.4 Summary of latent main effects split by age group
Show the code
params_agesplit_summary <- bind_rows(
  params_agesplit_lcs_extra_current %>% mutate(trait = names(b5_vars)[1], self = "current") %>% select(trait, self, group = label, beta = std.all, p.value),
  params_agesplit_lcs_extra_ideal %>% mutate(trait = names(b5_vars)[1], self = "ideal") %>% select(trait, self, group = label, beta = std.all, p.value),
  params_agesplit_lcs_agree_current %>% mutate(trait = names(b5_vars)[2], self = "current") %>% select(trait, self, group = label, beta = std.all, p.value),
  params_agesplit_lcs_agree_ideal %>% mutate(trait = names(b5_vars)[2], self = "ideal") %>% select(trait, self, group = label, beta = std.all, p.value),
  params_agesplit_lcs_consc_current %>% mutate(trait = names(b5_vars)[3], self = "current") %>% select(trait, self, group = label, beta = std.all, p.value),
  params_agesplit_lcs_consc_ideal %>% mutate(trait = names(b5_vars)[3], self = "ideal") %>% select(trait, self, group = label, beta = std.all, p.value),
  params_agesplit_lcs_neuro_current %>% mutate(trait = names(b5_vars)[4], self = "current") %>% select(trait, self, group = label, beta = std.all, p.value),
  params_agesplit_lcs_neuro_ideal %>% mutate(trait = names(b5_vars)[4], self = "ideal") %>% select(trait, self, group = label, beta = std.all, p.value),
  params_agesplit_lcs_openn_current %>% mutate(trait = names(b5_vars)[5], self = "current") %>% select(trait, self, group = label, beta = std.all, p.value),
  params_agesplit_lcs_openn_ideal %>% mutate(trait = names(b5_vars)[5], self = "ideal") %>% select(trait, self, group = label, beta = std.all, p.value)
) %>% mutate(group = ifelse(group=="d_int_a", "old", "young"))

kable(params_agesplit_summary, digits = 3)
trait self group beta p.value
extraversion current old 0.190 0.033
extraversion current young 0.391 0.000
extraversion ideal old -0.180 0.050
extraversion ideal young -0.007 0.928
agreeableness current old 0.172 0.028
agreeableness current young 0.142 0.071
agreeableness ideal old -0.045 0.570
agreeableness ideal young -0.045 0.483
conscientiousness current old 0.222 0.003
conscientiousness current young 0.251 0.000
conscientiousness ideal old -0.006 0.933
conscientiousness ideal young 0.039 0.532
neuroticism current old -0.348 0.000
neuroticism current young -0.428 0.000
neuroticism ideal old 0.154 0.065
neuroticism ideal young 0.020 0.752
openness current old 0.176 0.054
openness current young 0.298 0.000
openness ideal old 0.066 0.414
openness ideal young 0.110 0.140

Somewhat more pronounced changes in current-personality personality in the younger age group, and more pronounced changes in ideal-personality personality in the older age group (see extraversion!). However, a lot of this is only suggestive evidence (at p < .05), is not consistent across all traits, and does not replicate findings from Study 1. Difficult to interpret overall…